gpt4 book ai didi

regex - Perl 正则表达式 : meaning of "??"

转载 作者:行者123 更新时间:2023-12-04 16:33:16 25 4
gpt4 key购买 nike

我多年前写的脚本中有一个正则表达式。

我知道这个正则表达式的作用(寻找高于 80% 的百分比),但我不记得它的含义/原理。我看到使用了三元运算符,还有最后一个闭括号匹配,但我不知道例如 ?? 的含义:

qr/^(\d+)%$(??{$^N>= 80 ? '':'^'})/

有人可以为我解释这个正则表达式吗?

最佳答案

在我回答之前,我想指出使用嵌入式 perl 代码形式 (??...)如果您不完全理解其含义,则可能会充满错误。我已经编写 perl regexen 二十多年了,我的自然倾向是总是将这样的“用例”编码为正则表达式结果的过滤器,而不是将 perl 代码直接嵌入到正则表达式中。你被警告了。

好的,让我们把这个正则表达式分开:

^           # start of text

( # begin capture group
\d+ # one or more digits 0-9
) # end of capture group

% # literal percent sign character

$ # end of text

(??{ # start embedded perl code

$^N >= 80 # if last closed match group($^N) is greater than or equal to 80
? '' # then return empty pattern ('')
: '^' # else return start of text (^) pattern

}) # end embedded perl code

哪里 $^N引用最近闭合匹配对的值和 (??{ ... })零宽度子句将执行它包装的 perl 代码,将它返回的值转换为一个新的正则表达式,该正则表达式将添加到原始模式中。

因此,在此示例中,我们匹配一个或多个数字,后跟一个百分号字符。然后,如果捕获的值大于或等于 80,则针对文本评估空模式(有效地允许整个模式匹配,返回捕获的值),否则,评估 ^ (文本的开始)模式在字符串的末尾无法匹配,有效地不返回任何内容。

( 注意 通过将/x 修饰符添加到 Perl 正则表达式中,您可以将注释直接嵌入到模式中,这也将忽略嵌入的空格。我发现这是记录复杂正则表达式的好方法。 )

关于regex - Perl 正则表达式 : meaning of "??",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734211/

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