我正在为以下某些名称进行模式匹配:
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
获取模式。
答案 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+/