我需要有關非貪心選項的正則表達式匹配方面的幫助。如何編寫匹配非貪婪的正則表達式?
匹配模式是:
<img\s.*>
的文本匹配是:
<html>
<img src="test">
abc
<img
src="a" src='a' a=b>
</html>
這個表達式中的所有文本匹配從<img
持續>
。我需要它匹配第一次遇到>
後最初<img
,所以在這裏我需要得到兩場比賽,而不是我得到的。
我試過非貪心?
的所有組合,沒有成功。
我需要有關非貪心選項的正則表達式匹配方面的幫助。如何編寫匹配非貪婪的正則表達式?
匹配模式是:
<img\s.*>
的文本匹配是:
<html>
<img src="test">
abc
<img
src="a" src='a' a=b>
</html>
這個表達式中的所有文本匹配從<img
持續>
。我需要它匹配第一次遇到>
後最初<img
,所以在這裏我需要得到兩場比賽,而不是我得到的。
我試過非貪心?
的所有組合,沒有成功。
非貪心?
工作得很好。這只是你需要選擇點匹配所有選項在正則表達式引擎(regexpal,你使用的引擎,也有這個選項),你正在測試。這是因爲,當您使用.
時,正則表達式引擎通常不匹配換行符。您需要明確地告訴他們,要與.
例如太匹配換行符,
<img\s.*?>
工作正常!
檢查results here。
此外,閱讀有關how dot behaves在各種正則表達式口味。
有你也可以這樣做:因爲\ s表示「任何空白」,而「\ S」表示「任何非空白」,[\ s \ S]將匹配任何字符(如「。」,但包括新線)!同樣,您可以使用[\ d \ D]或[\ w \ W]。這可能是相當方便的一點「黑客攻擊」,它肯定是一個非常有用的技巧,需要注意。 – 2014-11-21 11:45:51
甚至在本例中,您可以使用:'] *>'來實現相同的效果:因爲「除了'>'」以外的任何字符都會包含新行! –
2014-11-21 11:52:54
很好的答案,但如何bash?回聲「 bla
」| grep -P'
'匹配整個字符串,儘管?運營商。 –
2015-03-22 08:47:48
?
操作數使匹配非貪婪。例如。 .*
是貪婪的,而.*?
不是。所以你可以使用像<img.*?>
這樣的東西來匹配整個標籤。或者<img[^>]*>
。
但請記住,整組HTML不能用正則表達式實際分析。
您的回答提醒了我:http://stackoverflow.com/a/1732454/431 – 2016-11-11 14:03:10
我認爲這更清楚地說' ?'是'*'的非貪婪版本。 – golopot 2016-11-12 01:34:02
檢查堆棧溢出問題What do lazy and greedy mean in the context of regular expressions?也是如此。
貪婪的手段匹配最長的字符串。
懶惰表示匹配儘可能短的字符串。
例如,貪婪的h。+ l匹配'hello'中的'hell',但懶惰的h。+?l匹配'hel'。
你在REGEX中運行什麼語言? – Utkanos 2012-08-10 09:41:56
[RegEx match open tags not except XHTML self-contained tags]可能的重複(https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – 2017-12-18 22:26:39