Perl——正则表达式的贪婪模式和非贪婪模式在使用perl进行正则表达式匹配时,经常使用贪婪匹配和非贪婪匹配两种匹配模式。
贪婪匹配(greedy match )匹配尽可能长的内容。 默认匹配是贪婪的匹配。
不贪婪匹配:尽可能少地匹配,也称为懒惰匹配lazy match。 *, 是否要添加到表示匹配次数的后面? 指示在非贪婪模式下匹配。
my $str='abc123abc1234 '; #字符串定义#greedymatchif(str=~~/a(w*3/) ) print'$(n '; }#lazymatchif(str=~~/a(w*? 3/) { # *号之后的? 不贪婪匹配/懒惰匹配print '$n '; #指向最后一个正则表达式匹配的数据。 (}w匹配包含下划线的单词字符
上面的代码可以用$1代替。
if(str=~~/(a(w*? 3 )/) print($1(n ); #1世代是指在上()内匹配的内容。 }匹配贪婪输出的结果是abc123abc1234。
不贪婪的匹配输出的结果是abc123。
贪婪的匹配有回溯的过程,限定匹配最长的内容,如果不满足下一个匹配条件,就会不断向前寻找。
不贪婪的匹配是从前到后,不断寻找符合条件的数据。