2016-03-21 2 views
0

Вслед могут быть приняты форматы,Объединить Регулярное выражение на основе Условия в Java

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

Где C представляет символ [AZ] и 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 
+1

У вас есть подходящие примеры для сравнения? –

+1

Для регулярных выражений существует символ _or_ '' '. – khelwood

+0

@ brso05: Снова прочитайте вопрос. C и N - только обозначения символов и чисел. –

ответ

0

UPDATE объединить ваши следующие две модели в одном:

^[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

+0

Вы использовали '|' в первой части, а ваше регулярное выражение соответствует 'AA |/1111'. Это неверно. Удаление '|' из него сделает все правильно. –

+0

@noob: Вы правы. Он соответствует 'AA |/1111'. Но OP не ищет изменения исходных шаблонов. – Quinn

+0

Да, но это не так, как вы говорите ИЛИ в классе персонажа. Возможно, было бы непонятно думать, почему принятое решение использовало '|', когда для OR нет ничего. Сам класс символов обозначает любой из символов, упомянутых в нем. –

1

Основываясь на текущем формате я пришел с этим регулярным выражением.

Ну еще не уверен, что OP ищет формат 1111-11111111 или цифры длиной от 4 до 8. Поэтому я дам решение для обоих случаев, которые могут кому-то пригодиться.

Для формата:(NNNN-NNNNNNNN) ИЛИ NN/(NN-NNNNN)

Regex:^([A-Z]{2}[A-Z0-9]?)\/((\d{4}-\d{8})|(\d{2}\/\d{2}-\d{5}))$

Regex101 Demo


Для л ength чисел в диапазоне от 4 до 8 и 2 до 5

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

Regex101 Demo

+1

^([AZ] {2} [A-Z0-9]? \ /) (\ D {4,8} | \ d {2} \/\ d {2,5}) $ Это решение также работает и намного проще. Большое спасибо :) –

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 
+0

Вы должны упомянуть, что вы используете флаг 'i' для нечувствительности к регистру. Это видно в вашем примере, но что, если нуб вроде меня копирует его прямо здесь? : P –

+0

ну .... если кто-то, как вы, это, вероятно, я уйду: P в любом случае я ожидаю, что OP знает, что там. – Saleem

+1

Все в порядке. Но мой вопрос в том, почему здесь вообще дело с чувствительностью к регистру? OP явно упоминал '[A-Z]'. Это будет путаница. Тем не менее, вы можете добавить его в качестве примечания. –

Смежные вопросы