2023-08-05

正则表达式 – 模式修正符作用详解(i、g、m、s、x、e)

正则表达式

常用的模式修正符有 i、g、m、s、x、e 等,它们之间可以组合搭配使用。

修正符 i 不区分大小写的匹配

如:”/abc/i” 可以与 abc 或 aBC 或 ABc 等匹配。

修正符 表示全局匹配

修正符 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() 使用,可以把匹配来的字符串当作正则表达式执行

发表回复

Your email address will not be published. Required fields are marked *