正则表达式Java Merge Pattern

pao*_*988 0 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}
Run Code Online (Sandbox Code Playgroud)

我用这个方法:

Pattern.compile(regex);
Run Code Online (Sandbox Code Playgroud)

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

pha*_*t0m 5

您可以使用反向引用:

[0-9]{4}([ -]|)([0-9]{4}\1){2}[0-9]{4}
Run Code Online (Sandbox Code Playgroud)

只有当分隔符全部时才会匹配

  • 空间
  • 连字符.
  • 空白

\1意思是"这与第一个捕获组完全匹配- 括号中的表达式 - 匹配".

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

您可以进一步简化它:

\d{4}([ -]|)(\d{4}\1){2}\d{4}
Run Code Online (Sandbox Code Playgroud)