如何匹配(PCRE)两个标签之间的所有内容?
我试过这样的事情:
<! - \ S * LoginStart \ S * - >&LT(。*);! - \ S * LoginEnd \ S * - >
但它对我来说效果不佳..
我对正则表达式有点新意,所以我希望有人能够向我解释如果能用正则表达式实现这一点,我将如何实现这一目标。
由于
答案 0 :(得分:12)
$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 -->'
答案 1 :(得分:1)
PHP和正则表达式?以下是一些建议:
'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us'
可能会更好 - U
大写使得正则表达式非贪婪,这意味着它将停留在可能有效的第一个<!--
。但重要的是s
,它告诉正则表达式将换行符与.
字符匹配。
根据您对大小写的确定程度,最后添加i
会使正则表达式搜索不区分大小写。
答案 2 :(得分:0)
我已经尝试过欧文的答案,但是它没有达到像
这样的条件 <!-- 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;标签