为什么我的正则表达式与我的输入数据不匹配?

时间:2015-07-20 15:40:28

标签: regex perl

我有一列值(字符串),如下所示:

arg123ala
arg345ala_r
thr567por thr789pro
pro1ala,thr2leu

我正在尝试识别那些只满足以下模式且不存在额外文本的值:

three letters-some numbers-three letters 

在前面的示例中,这将匹配第一个值,但不匹配其他三个,因为它们具有额外的文本位,或者有两个用空格或逗号分隔的模式实例。

我尝试在Perl中使用类似的东西:

if ( $value =~ /^[[:alpha:]]{3}\d{1,9}[[:alpha:]]{3}$) {
    $qualifier = "ok";
}
else {
    $qualifier = "needs cleaning";
}

实际上检查了regexplanet.com中的正则表达式,它在那里工作得很漂亮。但是,当我在我的代码中使用它时,它并不匹配我上面列出的任何值,即使是第一个也没有。知道为什么会发生这种情况吗?关于替代方案的任何建议吗?

2 个答案:

答案 0 :(得分:5)

工作正常。在这里它是固定的(你没有终止你的正则表达式)并纳入一个工作程序

use strict;
use warnings;
use v5.10;

while ( my $value = <DATA> ) {

  my $qualifier;

  if ( $value =~ /^[[:alpha:]]{3}\d{1,9}[[:alpha:]]{3}$/ ) {

      $qualifier = "ok";
  }
  else {
      $qualifier = "needs cleaning";
  }

  say $qualifier;
}

__DATA__
arg123ala
arg345ala_r
thr567por thr789pro
pro1ala,thr2leu

输出

ok
needs cleaning
needs cleaning
needs cleaning

答案 1 :(得分:0)

看起来主题启动器忘记了最终/正则表达式。 我会使用这样的表达式:/ ^ [a-z] {3} \ d + [a-z] {3} $ /

相关问题