gpt4 book ai didi

perl - 为什么 .* 不消耗这个 Perl 正则表达式中的整个字符串?

转载 作者:行者123 更新时间:2023-12-04 01:22:02 26 4
gpt4 key购买 nike

为什么第一个打印语句没有输出我期望的内容:

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 将包含与 (.*)* 匹配的内容/(.+)* ,即整个字符串。

关于perl - 为什么 .* 不消耗这个 Perl 正则表达式中的整个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1323613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com