如何通过reg ex [str] someth [/ str]块从字符串中剪切?

时间:2011-03-02 11:42:45

标签: php regex

Ex:我有一个字符串“my str [str] string string [/ str] my str [str] string string [/ str] kjnvjsfn” 我试着用RegExp这样做

preg_match_all('/\[str](.|\n|\r\n)*\[\/str\]/', $str, $arr);

但它直到最后[/ str]整个字符串 感谢。

4 个答案:

答案 0 :(得分:2)

设为non-greedy:使用*?代替*

preg_match_all('/\[str](.|\n|\r\n)*?\[\/str\]/', $str, $arr);

然而,正则表达式可能不是最好的方法。即,它可能足够用于您的目的(如果您自己编写它们)。但如果“标签”可以嵌套,那么你会发现正则表达式方法变得非常麻烦。

答案 1 :(得分:0)

尝试让你的正则表达式非贪婪:

preg_match_all('/\[str](.*?)\[\/str\]/s', $str, $arr);

答案 2 :(得分:0)

是的,那是因为*是贪婪的。尝试使用非贪婪*?

preg_match_all('/\[str](.|\n|\r\n)*?\[\/str\]/', $str, $arr);

答案 3 :(得分:0)

您可以使用m和s修饰符来简化表达式

preg_match_all('/\[str\](.*?)\[\/str\]/ms', $str, $arr);

这个表达式非贪婪,即使它超过多行,也会匹配[str]和[/ str]之间的任何内容,因此您不需要匹配\r\n