【发布时间】:2016-08-05 02:52:39
【问题描述】:
我有一个字符串:
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)。我需要两者都匹配。
【问题讨论】:
我有一个字符串:
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)。我需要两者都匹配。
【问题讨论】:
您遇到的问题是替代“操作员”(|)。您发布的正则表达式对应于“SAF”或“MPCP-<4-digit number>”。
你想要的是(?:SAF|MPCP)-\d{4}。 \d 匹配任何数字,{4} 表示“正好是最后一个令牌的 4 个”(在本例中为 \d)。 (?:) 表示“非捕获组”。
为了更好地解释您的问题,交替字符仅限于当前组 - 如果没有明确的括号组,则将整个模式用作隐式组。
【讨论】:
(SAF|MPCP)-[0-9][0-9][0-9][0-9]
SAF 和 MPCP 组。这应该可以解决您的问题。
【讨论】:
我认为"(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}"
【讨论】: