根据前面对正则表达式的描述(详情:正则表达式),我们今天将继续讨论单行和多行模式的使用以及容易出错的地方。单行和多行模式是出现在正则表达式的模式修饰符中的参数。目前常见的正则表达式都有这个选项,比如javascript正则表达式,一般是:“/正则表达式匹配字符/修饰符”,最后一个“/”后面是修饰符。那么,php也差不多。c#、python等。一般都调用正则表达式的匹配函数,并且都有一个可选的设置模式。
单线和多线图案容易产生误解。为什么说他们容易产生误会?它们在英语中对应的描述是:单线和多线,就是单线和多线的意思。所以很多朋友会从字面理解得出以下结论:(哈哈,刚用过,我也是这些朋友中的一个)。
1.单行表示从头到尾匹配,多行表示匹配字符串中有换行符时匹配在前。
2.单行与多行冲突,因此一次只能指定一个选项,不能同时使用。
以这种方式理解真相,很容易做到。让我们看看官方手册怎么说。
单线多线模式官方解释。
模式描述(单行)如果设置了此修饰符,模式中的点元字符将匹配所有字符,包括换行符。如果没有此修饰符,点与换行符m(多行)不匹配。目标字符串由单行字符组成(但是,实际上它可能包含多行),“第一行”元字符()只匹配字符串的起始位置,而“结束行”元字符。设置此修饰符后,“行首”和“行尾”将匹配目标字符串中的任何换行符(n)。在上面的描述之前或者之后,其实这两个修饰符只是在修改正则表达式中常用元字符的匹配范围。如果添加了“s”修饰符,元字符将能够匹配换行符(n),如果添加了“m”修饰符,元字符“$”将只匹配字符“n”之前的字符;元字符“”将在“n”字符后匹配。举个例子吧!(以下关于正则表达式?字符,可以看到前面一节:正则表达式(regex)的贪婪模式、懒惰模式使用)。
例如,看一个单行应用程序。
?Php///阅读hao123.com///and主页删除/* * *里面的脚本代码并删除脚本标签* * @ authorchengmo * @版权所有http://blog.chacuo.net/* @ param string $ content original string *。@param int $style匹配模式* @ return string */function remove _ script($ content,$ style=1) {$ reg=$ style==1?%script。*?*?/script%':'%script。*?*?/script % s;返回preg_replace($reg ' ',$ content);} $ content=file _ get _ contents(' http://www . Hao 123.com ');echo remove _ script($ content);
例如,看一个多行应用程序。
?Php///阅读hao123.com///read主页元标签内容/* * *阅读元标签内容* * @作者程默* @版权所有http://blog.chacuo.net/* @ param string $ content original string *。@param int $style匹配模式* @ return string */function read _ meta($ content,$ style=1) {$ reg=$ style==1?'%^meta.*?/%':'%^meta.*? s $ % m ';preg_match_all($reg,$content,$ arr);返回$ arr} $ content=file _ get _ contents(' http://www . Hao 123.com ');var _ dump(read _ meta($ content));
Postscript: s和m修饰符只是正确的,一些特殊的元字符已经改变。如果正则表达式中没有这些元字符。打开s和m字符前后不会有变化。对于上面读取的hao123.com代码,我们可以继续同时使用s、m模式。比如:“%script。*?*?(^currentProfile.*$).*?/script%sm ",匹配所有脚本标记,其中有js代码,还有一个以curentProfile开头的字符串。(以下是正则表达式,用于单行和多行。)