2011-02-18 84 views
3

我試圖替換2個標籤之間的所有內容,但我無法構建正確的表達式。正則表達式中的換行符

這是我做過什麼:/<tag>(.*|\n*)</tag>/

我想它來捕捉任何字符,包括換行符。

這是我所需要捕獲的例子:

<tag> 
     <div class="feed_title">Some Title</div> 
     <div class="feed_content">Some text</div> 
    </tag> 

一些你能告訴我什麼,我做錯了什麼?

這裏是RegExr一個鏈接,什麼樣的內容看起來像一個完整的例子:http://regexr.com?2t4n1

+0

爲什麼你不給我們一個例子,你的標籤/輸出是什麼樣的,以及你的確切preg_match調用的樣子。 – ehudokai 2011-02-18 00:16:05

+0

我對PHP沒有任何問題,我遇到的問題是返回標籤內的內容。問題在於表達式可能是錯誤的,因爲我無法獲取內容,我正在測試RegExr上的表達式,並且在出現換行符時失敗,並且由於該腳本正在處理HTML代碼,因此它是必需的。 – 2011-02-18 00:32:43

+0

非常感謝Eyequem和Michael!基於邁克爾的回答最後編輯的eyequem完成了這項工作。再次感謝你,你做到了! – 2011-02-18 01:50:39

回答

3
'#.#m' 

裝置MULTILINE,它使點能夠匹配換行符=換行符\ n

編輯:

,因爲它已經由銳利的眼睛和良好的校正大腦,這顯然是'#+#s' 的

EDIT2:

正如邁克爾Goldshteyn說,這應該工作

$ch = '<tag>\s+<div class="feed_title">Some Title</div>\s+<div class="feed_content">Some text</div>\s+</tag>' 

preg_match('#<tag>(.+?)</tag>#s',$ch,$match) 

還有另一種解決方案,而無需小號標誌,我認爲:

preg_match('#<tag>((.|\s)+?)</tag>#',$ch,$match) 

但它更復雜

編輯3:

我認爲,\ S在$ CH存在是無稽之談。 \ s用於RE,而不是字符串。

我寫的,因爲我想,這可能是空白\ t,可能是之前< 標籤>,並在其他線路

\ t是開始寫下逃跑;這不是寫\也不是一個理由

3

也許你的意思是這樣做呢?

# The ... in this example is your text to match 
preg_match("#<tag>(.*?)</tag>#s","...",$matches); 

下面是使用PHP,其中有一些很好的例子,一個文章的鏈接上XML data extraction using regular expressions