我需要搜索一个长文本,其中包含诸如“ 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)”。带有点,然后是行尾。
非常感谢。
该模式必须与字符串“ candidate no:(some number)”相匹配。带有点,然后是行尾。
我认为这个问题来自您的正则表达式中的双重问号。 ??
是一个惰性正则表达式量词,它表示在前元素(在此为半冒号':'
)的出现次数为0或1。给定以上说明,这实际上没有任何意义。
您的正则表达式缺少(整数)数字的表示形式。为此,您可以使用'\d+
':
$pat = 'candidate no:\d+\.'
<< [更新在zdim发表评论后
这里是一个替代解决方案,它将可选地接受数字周围的空格,并在(可选空格和)数字之后显式定义字符串的结尾。$pat = 'candidate no:\s*\d+\s*\.\s*$'