Regex Perl正则表达式行与点匹配
我需要在一个长文本中搜索,这些行包含像“候选者编号:23”这样的文本 这条线的末尾必须有一个点。我试过了Regex Perl正则表达式行与点匹配,regex,perl,Regex,Perl,我需要在一个长文本中搜索,这些行包含像“候选者编号:23”这样的文本 这条线的末尾必须有一个点。我试过了 $pat = 'candidate no:??' if ($line =~ /$pat/) { print "match found \n"; } 这很好,但当我尝试在图案中包含点时就不行了 $pat = 'candidate no:??.' 或 也试过 if ($line =~ /${pat}\.$/) 以上工作都没有,任何人都无法提出解决办法。该模式必须匹配字符串“候选编号:(
$pat = 'candidate no:??'
if ($line =~ /$pat/) {
print "match found \n";
}
这很好,但当我尝试在图案中包含点时就不行了
$pat = 'candidate no:??.'
或
也试过
if ($line =~ /${pat}\.$/)
以上工作都没有,任何人都无法提出解决办法。该模式必须匹配字符串“候选编号:(某个数字)”,并带有一个点,然后是行尾
非常感谢
该模式必须匹配字符串“候选编号:(某个数字)”,并带有一个点,然后是行尾
我认为这个问题来自你的正则表达式中的双重问号??
是一个惰性regexp量词,它表示前面元素的0或1次出现(此处分号为“”:”
)。鉴于上述规范,这实际上没有意义
您的regexp缺少(整数)数字的表示形式。为此,您可以使用'\d+
':
$pat = 'candidate no:\d+\.'
在zdim发表评论后更新 这里有一个替代解决方案,可以选择接受数字周围的空格,并显式定义数字后面的字符串结尾(可选空格和)
$pat = 'candidate no:\s*\d+\s*\.\s*$'
该模式必须匹配字符串“候选编号:(某个数字)”,并带有一个点,然后是行尾
我认为这个问题来自你的正则表达式中的双重问号??
是一个惰性regexp量词,它表示前面元素的0或1次出现(此处分号为“”:”
)。鉴于上述规范,这实际上没有意义
您的regexp缺少(整数)数字的表示形式。为此,您可以使用'\d+
':
$pat = 'candidate no:\d+\.'
在zdim发表评论后更新 这里有一个替代解决方案,可以选择接受数字周围的空格,并显式定义数字后面的字符串结尾(可选空格和)
$pat = 'candidate no:\s*\d+\s*\.\s*$'
您需要阅读一些正则表达式,以便更好地理解模式
use strict;
use warnings;
my $match = qr/candidate no:\d+\./;
while( <DATA> ) {
print if /$match/;
}
__DATA__
candidate no:2
candidate no:12
candidate no:43.
candidate no:254
candidate no:122.
candidate no:9.
candidate no:564
candidate no:367.
candidate no:98.
candidate no:25
candidate no:79
使用严格;
使用警告;
my$match=qr/候选人编号:\d+\./;
而(){
如果/$match/,则打印;
}
__资料__
候选人编号:2
候选人编号:12
候选人编号:43。
候选人编号:254
候选人编号:122。
候选人编号:9。
候选人编号:564
候选人编号:367。
候选人编号:98。
候选人编号:25
候选人编号:79
,您需要阅读一些正则表达式,以便更好地理解模式
use strict;
use warnings;
my $match = qr/candidate no:\d+\./;
while( <DATA> ) {
print if /$match/;
}
__DATA__
candidate no:2
candidate no:12
candidate no:43.
candidate no:254
candidate no:122.
candidate no:9.
candidate no:564
candidate no:367.
candidate no:98.
candidate no:25
candidate no:79
使用严格;
使用警告;
my$match=qr/候选人编号:\d+\./;
而(){
如果/$match/,则打印;
}
__资料__
候选人编号:2
候选人编号:12
候选人编号:43。
候选人编号:254
候选人编号:122。
候选人编号:9。
候选人编号:564
候选人编号:367。
候选人编号:98。
候选人编号:25
候选人编号:79
,作为替代方案,代码可以更改为
use strict;
use warnings;
my $search = qr/candidate no:\d+\./;
map { print if /$search/ } <DATA>;
__DATA__
candidate no:2
candidate no:12
candidate no:43.
candidate no:254
candidate no:122.
candidate no:9.
candidate no:564
candidate no:367.
candidate no:98.
candidate no:25
candidate no:79
使用严格;
使用警告;
my$search=qr/候选人编号:\d+\./;
映射{print if/$search/};
__资料__
候选人编号:2
候选人编号:12
候选人编号:43。
候选人编号:254
候选人编号:122。
候选人编号:9。
候选人编号:564
候选人编号:367。
候选人编号:98。
候选人编号:25
候选人编号:79
作为替代方案,代码可以更改为
use strict;
use warnings;
my $search = qr/candidate no:\d+\./;
map { print if /$search/ } <DATA>;
__DATA__
candidate no:2
candidate no:12
candidate no:43.
candidate no:254
candidate no:122.
candidate no:9.
candidate no:564
candidate no:367.
candidate no:98.
candidate no:25
candidate no:79
使用严格;
使用警告;
my$search=qr/候选人编号:\d+\./;
映射{print if/$search/};
__资料__
候选人编号:2
候选人编号:12
候选人编号:43。
候选人编号:254
候选人编号:122。
候选人编号:9。
候选人编号:564
候选人编号:367。
候选人编号:98。
候选人编号:25
候选人编号:79
:??
匹配:
零次或一次,但尽可能少<代码>匹配任何字符(不仅仅是点)<代码>:?\.与
或:.
字面匹配。您从未为数字指定匹配项,或者在:
之后和
之前指定任何匹配项。“匹配字符串”候选项否:(某个数字)。“带有点,然后是行尾。”--因此,您已经很好地阐述了正则表达式模式的描述,接下来要做的是找出如何进行匹配。现在您已经找到了一个解决方案,但我仍然建议您在阅读教程时,参考您身边的:?
匹配:
零次或一次,但尽可能少<代码>匹配任何字符(不仅仅是点)<代码>:?\.与
或:.
字面匹配。您从未为数字指定匹配项,或者在:
之后和
之前指定任何匹配项。“匹配字符串”候选项否:(某个数字)。“带有点,然后是行尾。”--因此,您已经很好地阐述了正则表达式模式的描述,接下来要做的是找出如何进行匹配。现在你已经有了一个解决方案,但我仍然建议你把教程和你身边的参考一起看一遍。讽刺的是,与点匹配正是OP需要做的
是用来匹配任何字符的,因此OP需要候选编号:…\
。不过,您的版本是改进的。具有讽刺意味的是,与dot匹配正是OP需要做的
是用来匹配任何字符的,因此OP需要候选编号:…\
。不过,您的版本是改进的。