题
如何匹配(PCRE)两个标签之间的所有内容?
我试过这样的事情:
LT <!>;! - <!> - \ S * LoginStart \ S * GT; LT(*)。<!>;! - \ S * LoginEnd \ S * - GT <!> ;
但它对我来说效果不佳..
我对正则表达式有点新意,所以我希望有人能够向我解释如果能用正则表达式实现这一点,我将如何实现这一目标。
由于
解决方案
$string = '<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->';
$regex = '#<!--\s*LoginStart\s*-->(.*?)<!--\s*LoginEnds\s*-->#s';
preg_match($regex, $string, $matches);
print_r($matches); // $matches[1] = <div id="stuff">text</div>
说明:
(.*?) = non greedy match (match the first <!-- LoginEnds --> it finds
s = modifier in $regex (end of the variable) allows multiline matches
such as '<!-- LoginStart -->stuff
more stuff
<!-- LoginEnds -->'
其他提示
PHP和正则表达式?以下是一些建议:
'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us'
可能会更好 - U
大写不会使正则表达式变得非贪婪,这意味着它将停留在可能有效的第一个<!--
。但重要的是s
,它告诉正则表达式将换行符与.
字符匹配。
根据您对大小写的确定程度,最后添加i
会使正则表达式搜索不区分大小写。
我已经尝试过欧文的答案,但是它没有达到像
这样的条件 <!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->"DONT MIND THIS"<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->
这包括行<!>“DONT MIND THIS <!>”;也就是说,它首先涵盖了所有内容 <!> lt;! - LoginStart - <!> gt;最后<!> lt;! - LoginEnds - <!> gt;标签
不隶属于 StackOverflow