为什么第一个打印语句没有输出我期望的结果:
first = This is a test string, sec = This is a test string
由于 * 和 + 都是贪婪的,为什么第一个匹配中的内部 * 即“((”内部的 * 不消耗整个字符串?
use strict;
use warnings;
my $string = "This is a test string";
$string =~ /((.*)*)/;
print "first = $1, sec = $2\n"; #prints "first = This is a test string, sec ="
$string =~ /((.+)*)/;
print "first = $1, sec = $2\n"; #prints "first = This is a test string, sec = This is a test string"
在第一个正则表达式中.*
匹配了两次。第一次它匹配整个字符串。第二次它匹配末尾的空字符串,因为.*
当没有其他内容可匹配时,匹配空字符串。
其他正则表达式不会发生这种情况,因为.+
无法匹配空字符串。
编辑:至于什么去哪里:$2 将包含上次匹配的内容.*
/ .+
被应用。 $1 将包含匹配的内容(.*)*
/ (.+)*
,即整个字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)