同意'm'修改说明中的PHP Modiefers Reference说明:
当设置此修饰符时,“行首”和“行尾”构造分别在主题字符串中的任何换行符之后或之前立即匹配,以及在开头和结尾处匹配。
我正在学习正则表达式,这个例子有点不合理:
<?php echo preg_replace("/^[\s]*$/m","<p>","with.\n\n\n\t \nTherefor"); ?>
最终:
"with.\n<p>\nTherefor"
但我精神上说'^'和'$'元字符就像previusly说的那样。 (^,$ =想象位置)
^with.$\n^$\n^$\n^\t $\n^Therefor$
并阅读正则表达式: 行的开头是否跟随一个空格字符([\ t \ r \ n])后跟行尾。
但正则表达式引擎从第二个'^'到第四个'$'吃掉了'\ n'。 不应该这样吗?: (^,$ =想象位置)
^with.$\n ^(no space character)$\n ^(no space character)$\n ^(\t )$\n ^Therefor$ with.\n <p>\n <p>\n <p>\n Therefor
认为正则表达式向右运行。 为什么正则表达式似乎看起来'\ n'。 因为它匹配点^(没有空格字符)$然后跟随......'\ n'。
我不知道是否有人能理解我。 谢谢大家。
答案 0 :(得分:1)
这个正则表达式似乎结合了多行......
但是你可以通过使用U
修饰符xor将?
添加到*
来避免这种情况,这样它就不再贪婪了:
echo preg_replace("/^[\s]*$/mU","<p>","with.\n\n\n\t \nTherefor");
echo preg_replace("/^[\s]*?$/m","<p>","with.\n\n\n\t \nTherefor");