2016-08-05 67 views
0

我有一个字符串:正则表达式匹配多个精确匹配

MPCP-1234 this is test SAF-1234 this is testing 

我需要匹配MPCP-1234SAF-1234

我正则表达式是

SAF|MPCP-[0-9][0-9][0-9][0-9] 

但它仅仅是找到MPCP-1234SAF(不SAF-1234)。我需要匹配两者。

​​

回答

0

您遇到的问题是另类 “经营者”(|)。您发布的正则表达式对应于“SAF”或“MPCP-<4-digit number>”。

你想要的是(?:SAF|MPCP)-\d{4}\d匹配任何数字,并且{4}表示“恰好4最后一个令牌”(在这种情况下,\d)。 (?:)的意思是“非捕获组”。

为了更好地解释您的问题,交替字符仅限于当前组 - 如果没有明确的括号组,则整个模式将用作隐式组。

+0

谢谢塞巴斯蒂安:做的工作:) – suj

0
(SAF|MPCP)-[0-9][0-9][0-9][0-9] 

组SAF和MPCP。这应该可以解决你的问题。

+0

想这已经,已经没有这个运气试过 – suj

0

我觉得"(SAF|MPCP)-[0-9][0-9][0-9][0-9]"可以解决您的问题,我测试shell grep ; echo -e "SAF-1234\nMPCP-1234" | grep -E "(SAF|MPCP)-[0-9]{4}"

+0

,没有运气 – suj