我有一個小問題,我想在如何讓這個正則表達式工作?
<tr><td>3</td><td>foo</td><td>2</td>
foo的發現,我用:
$<tr><td>\d</td><td>(.*)</td>$
找到富,而是因爲它不匹配它不工作</td>
在foo結尾,但</td>
在字符串末尾
我有一個小問題,我想在如何讓這個正則表達式工作?
<tr><td>3</td><td>foo</td><td>2</td>
foo的發現,我用:
$<tr><td>\d</td><td>(.*)</td>$
找到富,而是因爲它不匹配它不工作</td>
在foo結尾,但</td>
在字符串末尾
你必須使.*
懶惰,而不是貪婪。詳細瞭解懶惰vs貪婪here。
您的字符串錨點($
)也沒有意義。嘗試:
<tr><td>\d<\/td><td>(.*?)<\/td>
(正如看到rubular)
注意:我不主張使用正則表達式來解析HTML。但有時候,這個任務很簡單,可以通過正則表達式來處理,對此,一個完整的XML解析器是過度的(例如:這個問題)。知道選擇「正確的工具」是編程的一項重要技能。
解釋downvote。 – NullUserException 2010-09-01 18:31:12
我只是想說它不是我(即使我在downvote的另一篇文章中說HTML不規則,也不應該用正則表達式解析)。你實際上正在回答這個問題。 (編輯:爲你+1) – 2010-09-01 18:34:01
+1好的答案和感謝捕捉我的錯誤。 – Senseful 2010-09-01 20:12:15
用途:
^<tr><td>\d</td><td>(.*?)</td>
(關於不使用正則表達式解析XML插入強制性評論)
您的領導$
應該是^
。
如果您不想匹配字符串末尾的所有內容,請在末尾不要使用$
。然而,由於*
是貪婪的,它會盡可能地抓住它。一些正則表達式實現有一個非貪婪的版本,可以工作,但你可能只是想將(.*)
更改爲([^<]*)
。
事實上,我很好奇這個答案是否有什麼錯誤要求得到一個downvote。唉。 – 2010-09-02 00:26:40
一般而言,您將需要使用真正的html解析器,而不是正則表達式。請參閱:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Seth 2010-09-01 18:28:46
@Seth,others:好的,說HTML解析器的東西作爲*評論*是要走的路,而不是用錯誤的方式浪費答案。不錯的演出。 – 2010-09-01 18:37:16
另外:誰在降低這個問題?這是一個很好的問題,很好的問道。 (+1抵消) – 2010-09-01 18:37:51