需要帮助匹配正则表达式

时间:2013-11-22 07:12:17

标签: regex perl

我有一个字符串说

my $str = "FILLER-1-1,EQPT:MN,EQPT_MISSING,NSA,04-30,15-07-13,NEND,NA";

我想匹配一个模式说

my $pattern = "FILLER-1-1";

我正在使用以下正则表达式

$reg = $str =~ /$pattern/;

这很好用

现在的问题是,如果我们的字符串是

,它也匹配
FILLER-1-10/FILLER-1-11/FILLER-1-12 so on ...

我不想匹配这个。另外,我不希望我的正则表达式像

 $reg = $str =~ /$pattern\W+/;

这个问题正在解决上述问题,但\W可能会来或不来。在某些字符串中它可以来,而在其他字符串中它可能不会来。所以我需要正则表达式仅匹配FILLER-1-1而不使用\W+,它应该专门匹配FILLER-1-10

注意:如果有人对我的问题进行了-(减号)评分,请告诉我代码中的错误。如果这个人写评论也会很明显

3 个答案:

答案 0 :(得分:3)

当\ w匹配[a-zA-Z0-9]时,你可以使用零宽度假设\ b,它表示\ w状态的变化(称为“单词边界”,因此是“b”快捷键):

/ FILLER-1-1 \ B /

这意味着需要有一个与前一个单词状态不同的字符 - 单词状态更改。

匹配

FILLER-1-1.
FILLER-1-1&
FILLER-1-1,

不匹配

FILLER-1-1a
FILLER-1-16

详细了解here

答案 1 :(得分:0)

如果你想在输入(行)开头跟两个数字匹配FILLER,这个简单的正则表达式应该可以工作:

/~FILLER-\d+-\d+/
  • ~匹配输入的开头
  • \d匹配任何数字([0-9]
  • +至少匹配一个,但可以匹配任何数字

答案 2 :(得分:-1)

使用?量词,如下:

/FILLER-\d-\d\W?/

\W?表示不是零或一次