2008-11-13 70 views
4

我如何匹配(PCRE)两个标签之间的所有内容?用正则表达式匹配两个标签之间的所有内容?

我想是这样的:(。*)!

< - - \ S * LoginStart \ S * > < - \ S * LoginEnd \ S * - >

但它对我来说并没有太好的效果..

我对正规快车很陌生离子,所以我希望如果有人愿意向我解释我会如何实现这一点,如果它甚至可能与正则表达式。

谢谢

回答

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

PHP和正则表达式?下面是一些建议:

'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us' 

可能会更好 - 在U资本使得正则非贪婪的,这意味着它会在第一<!--可能停止工作。但重要的是s,它告诉正则表达式匹配一个换行符与.字符。

根据您对大小写的确定程度,在末尾添加i将使正则表达式搜索不区分大小写。

+0

可以降价吗? – 2008-11-13 19:51:39

0

我已经试过欧文的答案,但它的条件未能像

<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->"DONT MIND THIS"<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->

这包括行 “不介意这” 也是,那就是它涵盖了第一个内部的所有内容 <! - LoginStart - >和最后<! - LoginEnds - >标签

相关问题