Perl正则表达式与点匹配

问题描述 投票:0回答:1

我需要搜索一个长文本,其中包含诸如“ candidate no:23。”之类的文本的行。

该行的末尾必须有一个点。我已经尝试过

$pat = 'candidate no:??'

if ($line =~ /$pat/) {
print "match found \n";
}

这很好,但是当我尝试在图案中包含点时不起作用

$pat = 'candidate no:??.'

$pat = 'candidate no:??\.'

也尝试过

if ($line =~ /${pat}\.$/) 

以上工作均无,任何人都可以提出解决方案。该模式必须匹配字符串“ candidate no:(some number)”。带有点,然后是行尾。

非常感谢。

regex perl
1个回答
0
投票

该模式必须与字符串“ candidate no:(some number)”相匹配。带有点,然后是行尾。

我认为这个问题来自您的正则表达式中的双重问号。 ??是一个惰性正则表达式量词,它表示在前元素(在此为半冒号':')的出现次数为0或1。给定以上说明,这实际上没有任何意义。

您的正则表达式缺少(整数)数字的表示形式。为此,您可以使用'\d+':

$pat = 'candidate no:\d+\.'

<< [更新在zdim发表评论后

这里是一个替代解决方案,它将可选地接受数字周围的空格,并在(可选空格和)数字之后显式定义字符串的结尾。

$pat = 'candidate no:\s*\d+\s*\.\s*$'

© www.soinside.com 2019 - 2024. All rights reserved.