首页 > 解决方案 > If Else 正则表达式匹配

问题描述

我想构建一个正则表达式,在其中搜索包含连续 12 位数字的字符串。如果没有匹配项,则查找一行只有 10 位数字的字符串。

例如:

a123456789012a
a1234567890a

将返回:

123456789012

如果输入是:

a1234a
a1234567890a

它会返回:

1234567890

我设法为单个操作创建了正则表达式,分别(?<!\d)\d{10}(?!\d)为 10 位和(?<!\d)\d{12}(?!\d)12 位,但我无法将它们组合成 if-else 样式。

我尝试了以下方法:

(?(?<!\d)\d{12}(?!\d)|((?<!\d)\d{10}(?!\d)))

但如果第一个模式不匹配,正则表达式不会尝试匹配第二个,不返回任何内容

标签: regex

解决方案


您可以使用这样的简单正则表达式:

\d{12}|\d{10}

工作演示

看,我没有使用multiline也没有global标志。这样,模式将找到您想要的第一个匹配项。

情况1: 在此处输入图像描述

案例二: 在此处输入图像描述

顺便说一句,如果要捕获内容,请使用捕获组:

(\d{12}|\d{10})

推荐阅读