在Java中结合基于条件的正则表达式

时间:2016-03-21 16:54:45

标签: java regex

以下可以接受格式,

(CCC|CC|CCN)/(NNNN-NNNNNNNN)
OR 
(CCC|CC|CCN)/NN/(NN-NNNNN)

其中C表示字符[A-Z],N表示数字[0-9]

我设法创建2个正则表达式来匹配这两个条件,

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{4,8}$
OR
^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}/\d{2,5}$

是否可以根据/上的条件(即正斜杠的数量)将它们合并到一个正则表达式中?

示例有效示例可以是: -


MAT/1234
XP/1234
XW1/12345678

XU/12/34
KLY/12/34567
RT1/23/45678

3 个答案:

答案 0 :(得分:1)

根据您当前的格式,我想出了这个正则表达式。

目前还不确定OP是在寻找格式1111-11111111还是长度为4到8的数字。所以我会为这两种情况提供解决方案,这些情况可能会在将来派上用场。

格式: (NNNN-NNNNNNNN)NN/(NN-NNNNN)

正则表达式: ^([A-Z]{2}[A-Z0-9]?)\/((\d{4}-\d{8})|(\d{2}\/\d{2}-\d{5}))$

Regex101 Demo

对于范围4到8和2到5

的数字长度

正则表达式: ^([A-Z]{2}[A-Z0-9]?\/)(\d{4,8}|\d{2}\/\d{2,5})$

Regex101 Demo

答案 1 :(得分:0)

好吧,我的正则表达式更长了一点:

(?im)^([a-z]{2}[\\da-z]?)/(\\d{4}\\-\\d{8}|\\d{2}/\\d{2}\\-\\d{5})$

请参阅regex101

上的演示

匹配

AA2/2222-22222222
AAA/2222-22222222
AA/2222-22222222

AA2/22/22-22222
AA/22/22-22222
AAB/22/22-22222

但不是

AA2A/2222-22222222A
AAA/2222-222A22222
AA/2222-222222223

2A2/22/22-222222
3AA/22/22-22222
1AB/22/22-22222

答案 2 :(得分:0)

更新要将以下两种模式合并为一种模式:

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{4,8}$
OR
^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}/\d{2,5}$

你可以尝试:

^[A-Z]{2}[A-Z|0-9]{0,1}/\d{2}(?:\d{2,6}|/\d{2,5})$

REGEX DEMO