[英]perl regex match using global switch
我正在尝试匹配一个以字母开头的单词,然后是at。
我为此使用正则表达式
use strict;
use warnings;
use Data::Dumper;
my $str = "fat 123 cat sat on the mat";
my @a = $str =~ /(\s?[a-z]{1,2}(at)\s?)/g;
print Dumper( @a );
我得到的输出是:
$ perl ~/playground/regex.pl
$VAR1 = 'fat ';
$VAR2 = 'at';
$VAR3 = ' cat ';
$VAR4 = 'at';
$VAR5 = 'sat ';
$VAR6 = 'at';
$VAR7 = ' mat';
$VAR8 = 'at';
当我清楚地说at之前只匹配1个字符时,为什么它也匹配“ at”。
您的可选空格不是分隔单词的好方法:它们是可选的
使用单词边界构造\\b
粗略匹配单词的末尾
use strict;
use warnings;
use Data::Dumper;
my $str = "fat 123 cat sat on the mat";
my @aa = $str =~ /\b[a-z]+at\b/gi;
print Dumper \@aa;
$VAR1 = [
'fat',
'cat',
'sat',
'mat'
];
如果您想变得更聪明,并且确定找到的单词前面或后面没有非空格字符,则可以改写为
my @aa = $str =~ /(?<!\S)[a-z]+at(?!\S)/gi;
与您显示的数据产生相同的结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.