RegEx匹配多个完全字符串

时间:2016-08-05 02:52:40

标签: regex shell unix

我有一个字符串:

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)。我需要匹配两者。

Regex101 link

3 个答案:

答案 0 :(得分:0)

您遇到的问题是替代&#34;运营商&#34; (|)。您发布的正则表达式对应于&#34; SAF&#34;或&#34; MPCP-<4-digit number>&#34;。

你想要的是(?:SAF|MPCP)-\d{4}\d匹配任何数字,而{4}表示&#34;最后一个令牌中的4个&#34; (在这种情况下,\d)。 (?:)表示&#34;非捕获组&#34;。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分: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}"