2010-09-01 69 views
3

我有一個小問題,我想在如何讓這個正則表達式工作?

<tr><td>3</td><td>foo</td><td>2</td>

foo的發現,我用:

$<tr><td>\d</td><td>(.*)</td>$

找到富,而是因爲它不匹配它不工作</td>在foo結尾,但</td>在字符串末尾

+5

一般而言,您將需要使用真正的html解析器,而不是正則表達式。請參閱:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Seth 2010-09-01 18:28:46

+0

@Seth,others:好的,說HTML解析器的東西作爲*評論*是要走的路,而不是用錯誤的方式浪費答案。不錯的演出。 – 2010-09-01 18:37:16

+1

另外:誰在降低這個問題?這是一個很好的問題,很好的問道。 (+1抵消) – 2010-09-01 18:37:51

回答

2

你必須使.*懶惰,而不是貪婪。詳細瞭解懶惰vs貪婪here
您的字符串錨點($)也沒有意義。嘗試:

<tr><td>\d<\/td><td>(.*?)<\/td> 

(正如看到rubular

注意:我不主張使用正則表達式來解析HTML。但有時候,這個任務很簡單,可以通過正則表達式來處理,對此,一個完整的XML解析器是過度的(例如:這個問題)。知道選擇「正確的工具」是編程的一項重要技能。

+2

解釋downvote。 – NullUserException 2010-09-01 18:31:12

+0

我只是想說它不是我(即使我在downvote的另一篇文章中說HTML不規則,也不應該用正則表達式解析)。你實際上正在回答這個問題。 (編輯:爲你+1) – 2010-09-01 18:34:01

+0

+1好的答案和感謝捕捉我的錯誤。 – Senseful 2010-09-01 20:12:15

0

用途:

^<tr><td>\d</td><td>(.*?)</td> 

(關於不使用正則表達式解析XML插入強制性評論)

0

您的領導$應該是^

如果您不想匹配字符串末尾的所有內容,請在末尾不要使用$。然而,由於*是貪婪的,它會盡可能地抓住它。一些正則表達式實現有一個非貪婪的版本,可以工作,但你可能只是想將(.*)更改爲([^<]*)

+0

事實上,我很好奇這個答案是否有什麼錯誤要求得到一個downvote。唉。 – 2010-09-02 00:26:40

相關問題