gpt4 book ai didi

regex - Perl Regexp::Common 包在与单词边界一起使用时不匹配某些实数

转载 作者:行者123 更新时间:2023-12-02 00:53:28 25 4
gpt4 key购买 nike

下面的代码打印“34”而不是预期的“.34”

use strict;
use warnings;

use Regexp::Common;

my $regex = qr/\b($RE{num}{real})\s*/;
my $str = "This is .34 meters of cable";

if ($str =~ /$regex/) {
print $1;
}

我需要修复我的正则表达式吗? (需要边界词,因为不包括它会导致它匹配像 xx34 这样的字符串,我不想这样做)

或者它是 Regexp::Common 中的错误?我一直认为最长的比赛应该获胜。

最佳答案

单词边界是上下文相关的正则表达式结构。当它后面跟一个字符字符(字母、数字或 _ )时,这个位置前面应该是一个字符串的开头或一个非字符字符。在这种具体情况下,单词边界后跟一个非单词字符,因此需要单词字符恰好出现在该字符之前。

你可以使用一个没有歧义的词边界来表达一个负面的后视:

my $regex = qr/(?<!\w)($RE{num}{real})/;
^^^^^^^

(?<!\w)负向后看总是表示一件事:如果有则匹配失败 当前位置左侧没有单词字符。

或者,如果您希望匹配仅出现在空格或字符串开头之后,请使用空格边界:

my $regex = qr/(?<!\S)($RE{num}{real})/;
^^^^^^^

关于regex - Perl Regexp::Common 包在与单词边界一起使用时不匹配某些实数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106244/

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