正則 貪婪匹配 最大匹配 和最小匹配的問題。

2021-05-21 22:43:33 字數 687 閱讀 2913

貪婪匹配(最大匹配) 和最小匹配的問題。

在抓取鏈結位址時,使用以下正則時發現,當在鏈結標題 鏈結標題中含有html**時,不能抓取到位址。

/]+href=[/"/']([^>/"/'/s]+)[/"/'][^>]*>([^>]+)/i

尚若換成以下方式

/]+href=[/"/']([^>/"/'/s]+)[/"/'][^>]*>(。+)/i

則不能抓取到你需要的鏈結資料,預設情況下,perl使用的是貪婪匹配模式,也就是盡可能多的匹配資料。

如:下面的指令碼列印出「matched defgabcdef」,因為它盡可能多地匹配模式,直至結尾的『g』。

$data = 'abcdefgabcdefg';

$data =~ /abc(.+)g/i;

print "matched ";

要改變匹配特點,只須簡單地在量詞(加號[+]或星號[*])後面加乙個問號(?)即可。在上面的程式中把模式改為在『+』之後包含乙個『?』。

$data =~ /abc(.+?)g/i;

輸出變成「matched def」,因為模式不再貪婪,而在允許模式匹配的同時匹配最少數目的字元。

對於可能得到的匹配多於期望的匹配的情況,最小匹配是必要的。

文章**位址為:http://www.lampba.com/home-space-uid-4-do-blog-id-22.html

貪婪匹配和非貪婪匹配

貪婪模式 在整個表示式匹配成功的前提下,盡可能多的匹配 非貪婪模式 在整個表示式匹配成功的前提下,盡可能少的匹配 重複匹配0次或1次 重複匹配0次或更多次 重複匹配1次或更多次 預設情況下是貪婪的!content abbbbc pattern re.compile r ab result patte...

貪婪匹配和懶惰匹配

符號用法.匹配除 r n 之外的任何單個字元。要匹配包括 r n 在內的任何字元,請使用像 s s 的模式。匹配前面的子表示式0到1次 匹配前面的子表示式人任意次 匹配前面的子表示式一次或多次 大於等於1次 表示式 的意思很好理解,就是單個字元匹配任意次,即貪婪匹配。表示式 是滿足條件的情況只匹配一...

正則中的「貪婪匹配」和「懶惰匹配」

進行正則匹配時,像 以及 m,n 這幾種量詞 匹配數量 預設是屬於貪婪量詞,會進行貪婪匹配。什麼叫做貪婪匹配呢?貪婪就是盡可能的多匹配,貪心的意思。比如現在目標字串是 aaaa 四個a組成的字串 a 和 a 都會匹配 aaaa a?則會匹配 a 這就是貪婪匹配,實際運用中,有的時候我們卻希望盡可能少...