PHP正则表达式-修饰符
我们在PHP正则表达式的学习中会碰到修饰符,那么关于PHP正则表达式修饰符的理解以及使用我们需要注意什么呢?那么我们来具体的看看它的概念以及相关内容。在学习PHP正则表达式修饰符之前先来理解下贪婪模式,前面在元字符中提到过"?"还有一个重要的作用,即"贪婪模式",什么是"贪婪模式"呢?
PHP正则表达式贪婪模式:
比如我们要匹配以字母"a"开头字母"b"结尾的字符串,但是需要匹配的字符串在"a"后面含有很多个"b",比如"a bbbbbbbbbbbbbbbbb",那正则表达式是会匹配第一个"b"还是最后一个"b"呢?如果你使用了贪婪模式,那么会匹配到最后一个"b",反之只是匹配到第一个"b"。
PHP正则表达式贪婪模式使用实例:
/a.+?b/ /a.+b/U
对比不使用贪婪模式的实例如下:
/a.+b/
PHP正则表达式修饰符的种类及介绍:
i :忽略大小写,设置i选项后,模式中的字母会进行大小写不敏感匹配,即"a"和"A" 是一样的。
m:多行匹配模式,m选项会更改^和$元字符的默认行为,分别与行的开头和结尾匹配,而不是与输入的字符串的开头和结尾匹配
s:单行模式,如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
x:如果加上该修饰符,正则表达式中的“空白字符”和“换行符”将会被忽略,除非它已经被转义,同时#号(#)被解释为注释的开头
U:和问号的作用差不多,用于设置"贪婪模式"。
示例代码
<?php //非贪婪模式 $s = "abbb"; preg_match_all("/a.*b/",$s,$m); var_dump($m); //abbb //贪婪模式 //作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性 $s = "abbb"; preg_match_all("/a.*?b/",$s,$m); var_dump($m); //ab $s = "abbb"; preg_match_all("/a.*b/U",$s,$m); var_dump($m); //ab //单行模式 $s = "Single line description"; preg_match_all("/^S/s",$s,$m); var_dump($m); //S //多行模式 $s = "First line\nSecond line"; preg_match_all("/^S/m",$s,$m); var_dump($m); //S $s = "First line Second line"; preg_match_all("/^S/m",$s,$m); var_dump($m); //S //忽略正则表达式中的“非转义的空白字符”和“回车换号符” $p = "abc #category code\n123 #item number"; $s = "abc123"; preg_match_all("/".$p."/x",$s,$m); var_dump($m); //abc123,相当于匹配abc123
参考资料
http://www.360doc.com/content/10/0921/10/930254_55292179.shtml