【问题标题】:RegEx matching multiple exact strings正则表达式匹配多个精确字符串
【发布时间】: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)。我需要两者都匹配。

Regex101 link

【问题讨论】:

    标签: regex shell unix


    【解决方案1】:

    您遇到的问题是替代“操作员”(|)。您发布的正则表达式对应于“SAF”或“MPCP-<4-digit number>”。

    你想要的是(?:SAF|MPCP)-\d{4}。 \d 匹配任何数字,{4} 表示“正好是最后一个令牌的 4 个”(在本例中为 \d)。 (?:) 表示“非捕获组”。

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

    【讨论】:

    • 谢谢塞巴斯蒂安,?:完成了这项工作:)
    【解决方案2】:
    (SAF|MPCP)-[0-9][0-9][0-9][0-9]
    

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

    【讨论】:

      【解决方案3】:

      我认为"(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}"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-10
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多