我有以下文本
tooooooooooooon
根据我正在读的这本书,当?
跟在任何量词之后时,它就变成了非贪婪。
我的正则表达式to*?n
仍然返回tooooooooooooon
。
它应该返回ton
,不是吗?
知道为什么吗?
发布于 2008-10-29 01:36:10
正则表达式只能匹配实际存在的文本片段。
因为子字符串'ton‘不存在于字符串中的任何位置,所以它不可能是匹配的结果。匹配将仅返回原始字符串的子字符串
EDIT:明确地说,如果您使用的是下面的字符串,请使用额外的'n‘
toooooooonoooooon
此正则表达式(未指定'o's)
t.*n
将匹配以下内容(在“n”之前尽可能多的字符)
toooooooonoooooon
但是正则表达式
t.*?n
将仅匹配以下内容(在“n”之前尽可能少的字符)
toooooooon
发布于 2008-10-29 01:37:11
正则表达式尝试匹配其中的所有内容。因为要匹配的‘o不少于要匹配n的每个o,所以所有内容都是匹配的。另外,因为您使用的是o*?而不是o+?,所以不需要存在o。
示例,在Perl中
$a = "toooooo";
$b = "toooooon";
if ($a =~ m/(to*?)/) {
print $1,"\n";
}
if ($b =~ m/(to*?n)/) {
print $1,"\n";
}
~>perl ex.pl
t
toooooon
发布于 2008-10-29 01:35:08
您正在搜索的字符串(可以说是干草堆)不包含子字符串"ton“。
但是,它确实包含子字符串“tooooooooooooon.”。
https://stackoverflow.com/questions/246232
复制