正则表达式中常用的模式修正符有 i
、g
、m
、s
、x
、e
等。它们之间可以组合搭配使用。
它们的作用如下:
修正符:i
不区分大小写的匹,如: /abc/i
可以与 abc
或 aBC
或 ABc
等匹配。
修正符:g
表示全局匹配
修正符:m
将字符串视为多行,不管是那行都能匹配。例,模式为:$mode="/abc/m";
,要匹配的字符串为:$str="bcefg5e\nabcdfe"
注意其中 \n
换行了, abc
换到了下一行,$str
和 $mode
仍可以匹配,修正符 m
使得多行也可匹配。
修正符:s
将字符串视为单行,换行符作为普通字符。例:模式为: $mode="/pr.y/"
,要匹配字符串为: $str="pr\ny"
,两者不可匹配。.
是除了换行以外的字符可匹配。
修改下模式为:$mode="/pr.y/s"
,其中修正符 s
将 \n
视为普通字符,即不是换行,最后两者可以匹配。
修正符:x
将模式中的空白忽略。
修正符:A
强制从目标字符串开头匹配,例: $mode="/abc/A"
,可以与 $str="abcsdfi"
匹配,不可以与 $str2="sdsdabc"
匹配,因为 $str2
不是以 abc
开头。
修正符:D
如果使用 $
限制结尾字符,则不允许结尾有换行。例,模式为:$mode="/abc$/"
,可以与最后有换行的 $str="adshabc\n"
匹配,元子符 $
会忽略最后的换行 \n
如果模式为:$mode="/abc/D"
,则不能与 $str="adshabc\n"
匹配,修正符:D
限制其不可有换行,必需以 abc
结尾。
修正符:U
只匹配最近的一个字符串,不重复匹配。
如模式为:
$mode="/a.*c/"; $str="abcabbbcabbbbbc" ; preg_match($mode,$str,$content); echo $content[0]; //输出:abcabbbcabbbbbc;
如果 $mode="/a.*c/"
,变成$mode="/a.*c/U"
,则只匹配最近一个字符串,输出 abc
。
修正符:e
配合函数 preg_replace()
使用,可以把匹配来的字符串当作正则表达式执行。