正则表达式单⾏、多⾏模式简介(使⽤说明)
继上⼏篇正则表达式相关说明(详情:正则表达式 ),我们今天继续讨论下,它的单⾏,多⾏模式使⽤,及容易出现错误地⽅。单⾏,多⾏模式,都是正则表达式的模式修饰符⾥⾯出现的参数。⽬前常⽤正则表达式都有该使⽤选项,如:javascript 正则表达式,⼀般是:”/正则表达式匹配字符/修饰符“ ,最后⼀个”/” 后⾯是修饰符。然后,php也是类似的,c#,python等,⼀般调⽤正则表达式的匹配函数,都有⼀个另外选项的,设置模式。
单⾏、多⾏模式容易出现理解错误
为什么说,容易出现理解错误呢,它们英⽂对应说明是:SingleLine ,MultiLine,刚好是单⾏、多⾏意思。因此,很多朋友就会从字⾯理解⾥⾯,得出以下结论:(哈哈、刚刚使⽤,我也是这些朋友中⼀员)
1、单⾏,就是从头到尾匹配,多⾏就是如果匹配字符串,⾥⾯有换⾏符,就匹配到之前
2、单⾏跟多⾏是冲突的,⼀次只能指定⼀个选项,不能同时使⽤
这样来理解其实,很容易就会这样的。我们来看看,官⽅⼿册⾥⾯怎么说的。
单⾏、多⾏模式官⽅解释
模式
描述
s(单
⾏)
如果设置了这个修饰符, 模式中的点号元字符匹配所有字符, 包含换⾏符. 如果没有这个修饰符, 点号不匹配换⾏符regex匹配
m(多⾏)⽬标字符串是由单⾏字符组成的(然⽽实际上它可能会包含多⾏), “⾏⾸”元字符(^)仅匹配字符串的开始位置, ⽽”⾏末”元字符($)仅匹配字符串末尾。当这个修饰符设置之后, “⾏⾸”和”⾏末”就会匹配⽬标字符串中任意换⾏符(\n)之前或之后
通过上⾯说明,其实这2个修饰符都只是,修改正则表达式常见元字符的匹配范围了。如果加”s”修饰符,元字符”.” 将能够匹配换⾏符(\n),如果加”m”修饰符,元字符”$”,将只匹配到”\n”字符前;元字符”^”,将匹配到”\n”字符后。我们还是举例说明吧!(下⾯关于正则表达式?字符,可以看看前⾯⼀节:)
举例,看单⾏应⽤
<?php
///读取hao123⾸页
///并且去掉⾥⾯script代码
/**
*去掉script标签*
* @author chengmo
* @copyright blog.chacuo/
* @param string $content 原字符串
* @param int $style 匹配模式
* @return string
*/
function remove_script($content,$style=1)
{
$reg = $style == 1?"%<script.*?>.*?</script>%":"%<script.*?>.*?</script>%s";
return preg_replace($reg,"",$content);
}
$content = file_get_contents('www.hao123');
echo remove_script($content);
举例,看多⾏应⽤
<?php
///读取hao123⾸页
///读取meta标签内容
/**
*读取meta标签内容*
* @author chengmo
* @copyright blog.chacuo/
* @param string $content 原字符串
* @param int $style 匹配模式
* @return string
*/
function read_meta($content,$style=1)
{
$reg = $style == 1?"%^<meta.*?/>%":"%^<meta.*?>\s+$%m";  preg_match_all($reg,$content,$arr);
return $arr;
}
$content = file_get_contents('www.hao123');
var_dump(read_meta($content));
后记:s,m 修饰符只对,⼏个特殊元字符有改变。如果你正则表达式中没有那⼏个元字符。开启s,m字符前后将没有什么变化的。对于上⾯读取hao123代码,我们可以继续同时使⽤s,m模式。如:”%<script.*?>.*?(^currentProfile.*$).*?</script>%sm” ,匹配所有script标签,并且⾥⾯js代码,有⼀⾏以curentProfile开头字符串。(以下是正则表达式,单⾏多⾏⼀起使⽤)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。