2009-11-19 46 views
0
<br>Aggie<br><br>John<br><p>Hello world</p><br>Mary<br><br><b>Peter</b><br> 

我想創建一個安全,匹配這些正規式:我們如何創建這樣一個正則表達式來提取數據?

<br>Aggie<br> 
<br>John<br> 
<br>Mary<br> 
<br><b>Peter</b><br> 

這是可能的,有每一對<br>,他們之間的其他標籤(例如<i><strike> ...等)必須收集就像<br><b>Peter</b><br>

正則表達式應如何看待?

+7

http://www.codinghorror.com/blog/archives/001311.html * sigh * – Joey 2009-11-19 15:21:21

+0

我知道使用HTML解析器做這件事有時會更好。但是,這實際上只是一個虛構的例子,我想看看它是什麼語法,如果它真的必須在正則表達式中完成。 – bobo 2009-11-19 17:09:23

回答

1
<br>.*?<br> 

將匹配從一個<br>標籤到最接近的標籤之間的任何內容。

使用正則表達式解析HTML的主要問題是正則表達式無法處理任意嵌套的結構。這在你的例子中不是問題。

+0

你說得對,我需要一個非貪婪的匹配。 – bobo 2009-11-20 01:47:05

6

如果你在SO上學到了一件事,讓它成爲 - 「不要用正則表達式解析HTML」。使用HTML解析器

+0

對於任何人自動指向這個引用來自同一篇博客文章的人:「許多程序在分析時既不需要也不應該預測整個HTML的全部範圍。」如果你牢記這一點,分析類似HTML的輸入是完全可以的。 – candiru 2009-11-19 15:28:51

+2

此問題缺少強制性bobince引用:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – intgr 2009-11-19 15:29:17

+0

@candiru:明確提問者要求提供**「安全」**的正則表達式。正則表達式適用於一次性黑客攻擊,但它們當然不安全。 – intgr 2009-11-19 15:30:39

0

將字符串拆分爲(<br>)+。你會在結果的開頭和結尾得到空字符串,所以你也需要刪除它們。

如果你想保留<br>,那麼這是不可能的,除非你知道結果中每個元素前後都有一個。

+0

對不起,我誤解了這個問題。 – 2009-11-19 15:45:49

+0

儘管如此,您仍然可以爲每個結果添加「
」。不好,但如果OP *要求*
'... – Joey 2009-11-19 16:03:48