gpt4 book ai didi

regex - Perl regex\d+ 和 [0-9] 运算符仅显示字母数字字符串中的单个数字

转载 作者:可可西里 更新时间:2023-11-01 11:48:32 25 4
gpt4 key购买 nike

我遇到了以下问题:如果我使用第一个示例中的代码,变量 $1 仅包含每个字符串的最后一位。但是,如果我使用第三个示例,其中每个“字符串”只是一个数字,则 $1 变量会显示包含所有数字的完整数字。在我看来,\d+ 运算符在字母数字上下文和数字上下文中的工作方式不同。

这是我的问题:你能重现这个吗?这种行为是故意的吗?如何使用 perl 中的正则表达式操作捕获字母数字上下文中的完整数字?如果 \d 运算符的本质是惰性的,我可以让它更贪婪吗(如果为真,我该怎么做?)?

示例 1:

perl -e 'for ($i = 199; $i < 201; $i ++) { print "words".$i."words\n"}' | perl -ne 'if (/\A\w+(\d+)\w+/) {$num = $1; print $num,"\n";}'

输出:

9
0

示例 2:

perl -e 'for ($i = 199; $i < 201; $i ++) { print "words".$i."words\n"}' | perl -ne 'if (/\A\w+([0-9]+)\w+/) {$num = $1; print $num,"\n";}'

输出:

9
0

示例 3:

perl -e 'for ($i = 199; $i < 201; $i ++) { print "words".$i."words\n"}' | perl -ne 'if (/(\d+)/) {$num = $1; print $num,"\n";}'

输出:

199
200

提前致谢。非常感谢任何帮助。

最好的,克里斯

最佳答案

您得到的结果是预期的。在 /\A\w+(\d+)\w+/ 中,第一个 \w+ 是一个贪心模式,它会尽可能多地匹配匹配的字符,因为 \w 也匹配数字。

要么使用惰性量词 - /\A\w+?(\d+)\w+/ ,或者从 \w 中减去数字(例如 /\A[^\W\d]+(\d+)\w+/ )。 \w+? 将匹配 1 个或多个单词字符(字母/数字/_)尽可能少,并且 [^\W\d] 匹配任何字母或 _ 符号,因此,无需在此模式中使用惰性量词。

关于regex - Perl regex\d+ 和 [0-9] 运算符仅显示字母数字字符串中的单个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324619/

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