我想在一個大的HTML文本中獲取某個html節點,但是我的正則表達式中的某些內容很糟糕。停止在第一個字符匹配?
我要取的是這個樣子的所有URL:
<a href="ftp://mysite.com"> some stuff </a>
我試圖做的事:
/<a href="ftp:(.+)">/
,但有時它會工作,但有時它會抓住一切直到下一次關閉>
。
有沒有辦法重寫這個正則表達式,所以它會停在第一個>
?
我想在一個大的HTML文本中獲取某個html節點,但是我的正則表達式中的某些內容很糟糕。停止在第一個字符匹配?
我要取的是這個樣子的所有URL:
<a href="ftp://mysite.com"> some stuff </a>
我試圖做的事:
/<a href="ftp:(.+)">/
,但有時它會工作,但有時它會抓住一切直到下一次關閉>
。
有沒有辦法重寫這個正則表達式,所以它會停在第一個>
?
+
是貪婪運營商意味着它儘可能多的比賽,因爲它可能可以和仍然允許其餘的正則表達式匹配。爲此,我建議使用否定類,意思是任何字符,但以下情況除外:"
「一個或多個」時間。
/<a href="ftp:([^"]+)">/
讓你的正則表達式ungreedy:
/<a href="ftp:(.+?)">/
// here __^
或:
/<a href="ftp:([^>"]+)">/
但最好使用一個解析器。
*
,+
是希臘(儘可能匹配)。在他們之後追加?
,可以使非貪婪。
/<a href="ftp:(.+?)">/
,或者你可以指定使用否定的字符類排除"
([^...]
):
/<a href="ftp:([^"]+)">/
BTW, it's not a good idea to use regular expression to parse HTML.
'+'是由narure貪婪。你需要在'+'之後添加'?'分隔符來使其不貪婪。所以你的正則表達式是'' – 2014-09-21 10:06:31
只要使用'[^「] *',如果你希望它匹配所有內容直到''',而不是'。+ '。 – Unihedron 2014-09-21 10:11:55