当字符串包含空格时,Regexp不匹配

当字符串包含空格时,Regexp不匹配,regex,perl,Regex,Perl,我有以下规则来匹配字符串中的模式 2个字母数字字符,后跟0或1个字母,后跟0 或更多空格,后跟1到4位数字 我试过一个regexp,但还是漏掉了几个案例 这是我的密码: #!/usr/bin/perl use strict; use warnings; my @quer = ('a1q 1234', '11 asdd', 'as 11aa', 'asdasdasd', 'asdd as', 'asdasd asdassdasd', '11 1231', '11 a 12345', '345 1

我有以下规则来匹配字符串中的模式

2个字母数字字符,后跟0或1个字母,后跟0 或更多空格,后跟1到4位数字

我试过一个regexp,但还是漏掉了几个案例

这是我的密码:

#!/usr/bin/perl
use strict;
use warnings;
my @quer = ('a1q 1234', '11 asdd', 'as 11aa', 'asdasdasd', 'asdd as', 'asdasd asdassdasd', '11 1231', '11 a 12345', '345 1 1231', '12a 123', 'ab 12', 'ab12');
foreach my $query (@quer) {
    if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]{0,1}\s*\b[0-9]{1,4}\b/) {
        print "Matched : $query\n";
    } else {
        print "Doesn't match : $query\n";
    }
}

< >我的代码匹配<代码> AB 12 但不是<代码> AB12,但是按照规则,它应该匹配两个。

< p>中间有一个单词边界,这是拧紧您的正则表达式。删除它:

if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]{0,1}\s*\b[0-9]{1,4}\b/)
                                                 ^
                                             remove this
应该是:

if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]?\s*[0-9]{1,4}\b/)

<> >,<代码> [AZ-Z] {0,1}与<代码> [AZ-Z]:

> P>你在中间有一个单词边界,它正在拧紧你的正则表达式。删除它:

if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]{0,1}\s*\b[0-9]{1,4}\b/)
                                                 ^
                                             remove this
应该是:

if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]?\s*[0-9]{1,4}\b/)
注意,
[a-zA-Z]{0,1}
与perl(和其他一些语言)中的
[a-zA-Z]?

一样,您有一些很好的字母数字和类似的快捷方式

e、 g:

但是您的问题是中间的单词边界(
\b

试试这个:

if ($query =~ m/\b\w{2}\w?\s*\d{1,4}\b/)
在perl(和其他一些语言)中,您有一些很好的字母数字、数字之类的快捷方式

e、 g:

但是您的问题是中间的单词边界(
\b

试试这个:

if ($query =~ m/\b\w{2}\w?\s*\d{1,4}\b/)
试试这个:

if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]{0,1}\s*[0-9]{1,4}\b/) {
这正是你所要求的

试试这个:

if ($query =~ m/\b[a-zA-Z0-9]{2}[a-zA-Z]{0,1}\s*[0-9]{1,4}\b/) {
if ($query =~ m/[0-9A-z]{2}[A-z]?\s*[0-9]{1,4}$/)
这正是你所要求的

if ($query =~ m/[0-9A-z]{2}[A-z]?\s*[0-9]{1,4}$/)
上述代码也将起作用


上述代码也将起作用

要使这些快捷方式等效,您需要使用
/a
标志,否则它们也会匹配Unicode字符。参考:要使这些快捷方式等效,您需要使用
/a
标志,否则它们也会匹配Unicode字符。参考: