Perl中的模式匹配

时间:2013-03-08 19:10:45

标签: regex perl

我正在为以下某些名称进行模式匹配:

ABCD123_HH1
ABCD123_HH1_K

现在,我的grep以上名称的代码如下:

($name, $kind) = $dirname =~ /ABCD(\d+)\w*_([\w\d]+)/; 

现在,我面临的问题是我在ABCD123_HH1中同时获得了ABCD123_HH1_K$dirname的模式。但是,我的变量$kind不会使用此ABCD123_HH1_K。它需要ABCD123_HH1模式。

感谢您的时间。您能否告诉我如何通过_k获取模式。

3 个答案:

答案 0 :(得分:4)

您需要将_K部分添加到正则表达式的末尾,并使其?成为可选部分:

/ABCD(\d+)_([\w\d]+(_K)?)/

我还删除了\w*,这是无用的,让您无法正确获取HH1_K

答案 1 :(得分:1)

您应该检查零次或多次_K

  Perl的regexp中的

*意味着零次或多次

     

+表示至少一次或多次。

因此,在正则表达式中,请附加(_K)*

最后,你的正则表达式应该是这样的:

/ABCD(\d+)\w*_([\w\d]+(_K)*)/

答案 2 :(得分:0)

\w包括字母,数字和下划线。

所以你可以使用像这样简单的东西: /ABCD\w+/