我有一个字符串:
MPCP-1234 this is test SAF-1234 this is testing
我需要匹配MPCP-1234
和SAF-1234
。
我的注册表是
SAF|MPCP-[0-9][0-9][0-9][0-9]
但它只找到MPCP-1234
和SAF
(不是SAF-1234
)。我需要匹配两者。
答案 0 :(得分:0)
您遇到的问题是替代"运营商" (|
)。您发布的正则表达式对应于" 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}"