ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 模式修正符 对正则解释进行修正用的单个符号。(写在定界符外面,写在右边) 注意:一个符号就是一个功能,可以组合起来使用 [php支持](https://www.php.net/manual/zh/reference.pcre.pattern.modifiers.php): i m s x e(php7移除) A D S U X J u ``` <pre class="calibre17">``` 修正符<span class="token3">:</span>i 不区分大小写的匹配<span class="token3">;</span> 如<span class="token3">:</span><span class="token2">"/abc/i"</span>可以与abc或aBC或ABc等匹配<span class="token3">;</span> 修正符:g表示全局匹配 修正符<span class="token3">:</span>m 将字符串视为多行<span class="token3">,</span>不管是那行都能匹配<span class="token3">;</span> 例<span class="token3">:</span>#模式为<span class="token3">:</span>$mode<span class="token1">=</span><span class="token2">"/abc/m"</span><span class="token3">;</span> 要匹配的字符串为<span class="token3">:</span>$str<span class="token1">=</span><span class="token2">"bcefg5e\nabcdfe"</span> 注意其中\n<span class="token3">,</span>换行了abc换到了下一行<span class="token3">;</span> $str和$mode仍可以匹配<span class="token3">,</span>修正符m使得多行也可匹配<span class="token3">;</span> 修正符<span class="token3">:</span>s 将字符串视为单行<span class="token3">,</span>换行符作为普通字符<span class="token3">;</span> 例<span class="token3">:</span>#模式为<span class="token3">:</span>$mode<span class="token1">=</span><span class="token2">"/pr.y/"</span><span class="token3">;</span> 要匹配字符串为<span class="token3">:</span>$str<span class="token1">=</span><span class="token2">"pr\ny"</span><span class="token3">;</span> 两者不可匹配<span class="token3">;</span> <span class="token3">.</span> 是除了换行以外的字符可匹配<span class="token3">;</span> 修改下模式为<span class="token3">:</span>$mode<span class="token1">=</span><span class="token2">"/pr.y/s"</span><span class="token3">;</span> 其中修正符s将\n视为普通字符<span class="token3">,</span>即不是换行<span class="token3">;</span> 最后两者可以匹配<span class="token3">;</span> 修正符<span class="token3">:</span>x 将模式中的空白忽略<span class="token3">;</span> $pattern <span class="token1">=</span> <span class="token2">'/a c/x'</span><span class="token3">;</span> #这里的空白会被忽略 $string <span class="token1">=</span> <span class="token2">'a c'</span><span class="token3">;</span> <span class="token5">if</span> <span class="token3">(</span><span class="token4">preg_match</span><span class="token3">(</span>$pattern<span class="token3">,</span> $string<span class="token3">,</span> $arr<span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span class="token3">;</span> <span class="token4">print_r</span><span class="token3">(</span>$arr<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token5">else</span> <span class="token3">{</span> echo <span class="token2">"<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">//这次的匹配结果是失败的。因为我们使用模式修正符x取消了模式中的空格。注意:我们无法使用模式修正符取消\s表示的空白</span> 修正符<span class="token3">:</span>A 强制从目标字符串开头匹配<span class="token3">;</span> 例<span class="token3">:</span>#$mode<span class="token1">=</span><span class="token2">"/abc/A"</span><span class="token3">;</span> 可以与$str<span class="token1">=</span><span class="token2">"abcsdfi"</span>匹配<span class="token3">,</span> 不可以与$str2<span class="token1">=</span><span class="token2">"sdsdabc"</span>匹配<span class="token3">;</span> 因为$str2不是以abc开头<span class="token3">;</span> #修正符<span class="token3">:</span>D 如果使用$限制结尾字符<span class="token3">,</span>则不允许结尾有换行<span class="token3">;</span> 例<span class="token3">:</span>#模式为<span class="token3">:</span>$mode<span class="token1">=</span><span class="token2">"/abc$/"</span><span class="token3">;</span> #可以与最后有换行的$str<span class="token1">=</span><span class="token2">"adshabc\n"</span>匹配<span class="token3">;</span> #元子符$会忽略最后的换行\n<span class="token3">;</span> #如果模式为<span class="token3">:</span>$mode<span class="token1">=</span><span class="token2">"/abc/D"</span><span class="token3">,</span> #则不能与$str<span class="token1">=</span><span class="token2">"adshabc\n"</span>匹配<span class="token3">,</span> #修正符D限制其不可有换行<span class="token3">;</span>必需以abc结尾<span class="token3">;</span> #修正符<span class="token3">:</span>U 只匹配最近的一个字符串<span class="token3">;</span>不重复匹配<span class="token3">;</span> 例<span class="token3">:</span>#如模式为<span class="token3">:</span> $mode<span class="token1">=</span><span class="token2">"/a.*c/"</span><span class="token3">;</span> $str<span class="token1">=</span><span class="token2">"abcabbbcabbbbbc"</span> <span class="token3">;</span> <span class="token4">preg_match</span><span class="token3">(</span>$mode<span class="token3">,</span>$str<span class="token3">,</span>$content<span class="token3">)</span><span class="token3">;</span> echo $content<span class="token3">[</span><span class="token6">0</span><span class="token3">]</span><span class="token3">;</span> <span class="token">//输出:abcabbbcabbbbbc;</span> #如果$mode<span class="token1">=</span><span class="token2">"/a.*c/"</span><span class="token3">;</span>变成$mode<span class="token1">=</span><span class="token2">"/a.*c/U"</span><span class="token3">;</span> # 则只匹配最近一个字符串<span class="token3">,</span>输出<span class="token3">:</span>abc<span class="token3">;</span> #修正符<span class="token3">:</span>e 配合函数<span class="token4">preg_replace</span><span class="token3">(</span><span class="token3">)</span>使用<span class="token3">,</span> #可以把匹配来的字符串当作正则表达式执行<span class="token3">;</span> ``` ```