[英]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.