2013-07-04 2 views
1

У меня есть строка:РегВыр повторен группы

10-02; 34-05;

Такие элементы, как дд-дд можно повторять много раз:

10-02; 34-05; 12-02; 23-05; 10-42; 44-05

В конце строки символ ; может быть необязательным, но между элементами dd-dd должен быть обязательным символ ;.

Я попытался построить ти регулярное выражение /^([0-9]{2}-[0-9]{2}[;])+$/) но он охватывает случаи как 10-02;34-05;12-02;23-05;10-42;44-05 но не 10-02;34-05;12-02;23-05;10-42;44-05; с символом ; в конце.

Как мне создать регулярное выражение для покрытия обоих случаев.

Спасибо.

+0

Некоторые из ваших ввода '12-012' не' \ d \ d- \ d \ d'. Это '\ d {2} - \ d {2,3}' – anubhava

+0

спасибо, но это опечатка. –

ответ

2

Простой ^(?:\d{2}-\d{2}(?:;|$))+$

Что означает:

^    # start of line 
(?:    # non-capturing group 
    \d{2}  # match 2 digits 
    -   # match a hyphen 
    \d{2}  # match 2 digits 
    (?:;|$)  # match ; or end of line 
)+    # repeat 1 or more times 
$    # end of line 

Примечание

10-02;34-05;12-012;23-05;10-42;44-05; 
       ^--- You have 3 digits here ??? If so change all {2} to + 

Online demo

+0

На самом деле я считаю, что это регулярное выражение не допускает строк, которые заканчиваются на ';', поскольку вы вынуждаете, чтобы конец строки исключал возможность точки с запятой. – cgledezma

+0

@cgledezma Существует онлайн-демонстрация, попробуйте :) – HamZa

2

Вы можете использовать ?, чтобы дополнительно соответствовать PATT Эрн

^\d{2}-\d{2}(;\d{2}-\d{2})*;?$ 

или

^(\d{2}-\d{2};)*(\d{2}-\d{2};?)$ 
1

использовать что-то вроде этого:

^(\d{2}-\d{2};)*\d{2}-\d{2}(;)?$ 

Оператор ? делает последний parenthized выражение не обязательно, как размещение {0, 1} после него.

2

Это примерно так же просто/кратко, как вы можете выразить это:

^(\d\d-\d\d(;|$))+$ 
+0

На самом деле это регулярное выражение вернет совпадение внутри, например, этой строки: '10-02; 34-05; 12-12; 23-05; 10- 42; 44-05; lzqejbg', что было бы неверно. Чтобы он действительно работал, вы запрашиваете конец строки после шаблона, например, ответ, который был принят. – cgledezma

+0

@cgledezma a) «это зависит от того, на каком языке. Java 'String.matches()', например, должен соответствовать вводу * whole * для соответствия (начало и конец подразумеваются и не нужны), а так как язык не указан, конец может не понадобиться b) если требуется конец, старт также должен быть необходим. Ответ обновлен. – Bohemian

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