我有一列值(字符串),如下所示:
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中的正则表达式,它在那里工作得很漂亮。但是,当我在我的代码中使用它时,它并不匹配我上面列出的任何值,即使是第一个也没有。知道为什么会发生这种情况吗?关于替代方案的任何建议吗?
答案 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} $ /