gpt4 book ai didi

regex - 全局 g 正则表达式标志的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 17:35:30 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Help understanding global flag in perl

(2 个回答)


7年前关闭。



my $test = "There was once an\n ugly ducking";
if ($test =~ m/ugly/g) {
if ($test =~ m/here/g) {
print 'Match';
}
}

结果没有输出,但是
my $test = "There was once an\n ugly ducking";
if ($test =~ m/here/g) {
if ($test =~ m/ugly/g) {
print 'Match';
}
}

结果匹配!

如果我从正则表达式中删除 g 标志,那么第二个内部测试将匹配 $test 中出现的任何匹配项。我找不到关于为什么会这样的引用。

最佳答案

是的。该行为记录在 perlop 中手册页。使用 m/.../g标志在下一场比赛的字符串中前进。

In scalar context, each execution of "m//g" finds the next match, returning true if it matches, and false if there is no further match. The position after the last match can be read or set using the "pos()" function; see "pos" in perlfunc. A failed match normally resets the search position to the beginning of the string, but you can avoid that by adding the "/c" modifier (e.g. "m//gc"). Modifying the target string also resets the search position.



因此,在 ugly 之后的第一种情况下没有 here子字符串,但在第二种情况下,它首先匹配 hereThere后来它找到了 ugly单词。

关于regex - 全局 g 正则表达式标志的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20948491/

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