2008-11-13 98 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 - >標籤

相關問題