[英]Confused about Grabbing HTML Tags regex pattern
我正在閱讀regular-expressions.info示例,以嘗試了解更多正則表達式模式。
第一個示例Grabbing HTML Tags討論了用於特定HTML標簽的開始和結束對的正則表達式。
<TAG\b[^>]*>(.*?)</TAG>
我在這里有點困惑。 為什么將\\b[^>]*
添加到上述正則表達式模式中,而通過使用以下正則表達式模式可以實現相同的目的:
<TAG>(.*?)</TAG>
為什么要使用這種額外的正則表達式模式? 它對性能有幫助嗎?
<a href=...> stuff </a>
類的<a href=...> stuff </a>
,而不是簡單的<b> stuff </b>
,在該地方您的選項將起作用。 <attribute ...> stuff </a>
類的東西,需要\\b
邊界 .*?
與[^<]*
相反,需要在開始和結束標簽之間插入,因為在開始和結束標簽之間您可能會有另一個標簽(例如<b>
) 因為沒有單詞邊界,它不僅匹配標簽,而且匹配所有內容。
您可以嘗試演示。 只需在模式中使用\\b
。
<TAG\b[^>]*>(.*?)</TAG>
說明:
<
匹配<
符號。 TAG
標簽名稱 \\b
在單詞字符和非單詞字符之間匹配。 [^>]*
匹配不>
零或更多次的任何字符。 (.*?)
捕獲開始和結束標記內的部分。 ?
*
后不願進行匹配。 </TAG>
匹配結束標簽。 例如:
輸入:
<a href="www.foo.com">link</a>
<ahref="www.foo.com">link</a>
正則表達式:
<a[^>]*>(.*?)<\/a>
上面的正則表達式將匹配兩個鏈接。
正則表達式:
<a\b[^>]*>(.*?)<\/a>
但這將與第一個匹配,因為a
和第一個space
字符之間存在單詞邊界。
一些開始標簽具有諸如<img src="asdf.png">
類的屬性。 直到到達>
,標簽才結束,因此單詞src="asdf.png"
和non- >
字符匹配src="asdf.png"
。
\\b[^>]*
<TAG\b[^>]*>(.*?)</TAG>
允許在開放標記中包含文本(例如參數: width="30"
)和空格(只要它只是一個TAG
而不是TAGX
或其他某種類型-這就是\\b
字邊界 ) 。 html中的語法和間距非常松散。 允許額外的參數和空格始終是安全的,因為單個html標簽可以跨越多行。
后者正則表達式
<TAG>(.*?)</TAG>
僅允許開始標簽精確地是 <TAG>
然后是“可能跨越多行的某些文本”,然后是</TAG>
。
?
在.*?
是不情願 ,意味着下一個收盤</TAG>
是唯一可以匹配的收盤</TAG>
。 消除?
將其更改為greedy ,這意味着匹配搜索字符串中的最后一個</TAG>
。
確保檢查出堆棧溢出正則表達式常見問題解答 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.