正则表达式Java Merge Pattern

时间:2012-11-03 15:16:20

标签: java regex

我有这三个正则表达式。它们单独工作,但我想将它们合并为一种模式。

regex1 = [0-9]{16}
regex2 = [0-9]{4}[-][0-9]{4}[-][0-9]{4}[-][0-9]{4}
regex3 = [0-9]{4}[ ][0-9]{4}[ ][0-9]{4}[ ][0-9]{4}

我使用这种方法:

Pattern.compile(regex);

合并它们的正则表达式字符串是什么?

2 个答案:

答案 0 :(得分:5)

您可以使用backreferences

[0-9]{4}([ -]|)([0-9]{4}\1){2}[0-9]{4}

只有在分隔符全部为

时才会匹配
  • 空间
  • 连字符
  • 空白

\1表示“这与括号中的第一个capturing group - 表达式完全匹配 - 匹配”。

由于([ -]|)是该组,因此要匹配的模式的其他两个分隔符必须相同。

您可以simplify it further来:

\d{4}([ -]|)(\d{4}\1){2}\d{4}

答案 1 :(得分:1)

以下内容应匹配三种模式匹配的任何内容:

regex = [0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}[- ]?[0-9]{4}

也就是说,我假设您对数字之间的连字符,空格没有任何兴趣?

注意:这也适用于你有三者的任意组合的情况,例如

0000-0000 00000000

可能不合适?


或者,如果您需要匹配三个单独模式中的任何一个,那么只需将它们与|连接起来,如下所示:

([0-9]{16})|([0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4})|([0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4})

(您的原始示例似乎在空格和连字符周围有不必要的方括号)