使用正则表达式匹配两个标签之间的所有内容?

时间:2008-11-13 19:40:22

标签: php html regex tags

如何匹配(PCRE)两个标签之间的所有内容?

我试过这样的事情:

  

<! - \ S * LoginStart \ S * - >&LT(。*);! - \ S * LoginEnd \ S * - >

但它对我来说效果不佳..

我对正则表达式有点新意,所以我希望有人能够向我解释如果能用正则表达式实现这一点,我将如何实现这一目标。

由于

3 个答案:

答案 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;标签