2016-04-27 2 views
1

У меня есть регулярное выражение (?:^|[^\w])(\d{5}(?:[-\s]\d{4})?)(?:$|[^\w]).Java Regex - Исключить 5-значные числа, прикрепленные hypen

Он ищет либо 5-значный почтовый индекс США, либо более длинную версию с 5 + 4 цифрами.

Однако это конкретное регулярное выражение также соответствует 5 цифрам для чисел следующей формы.

1111-11111. Матч 11111. Как я могу исключить этот тип дела?

Я попытался добавить гипноз к исключению в начале регулярного выражения так, (?:^|[^\w]|-), который не имел никакого эффекта.

+1

Исправлено. (?:^| [^ \ Ш -]) (\ d {5} (: [- \ s] \ D {4})?) (: $ | [^ \ W]?). Добавлен hypen в неправильное место. – cjawahar

+0

Вы действительно хотите исключить значения «11111» и «11111-1111» или только после дефиса? Я думаю, вы бы скорее отредактировали вопрос, например, вы хотите избежать соответствия '12345' в' 19875-12345'. –

ответ

1

Обратите внимание, что вы можете использовать

\b(?<!-)\d{5}(?:[- ]\d{4})?(?!-)\b 

, который короче и более читаемым. (?<!-) отрицательные сделает просмотр назад, что ни одна - не предшествует значение, (?!-) отрицательного предпросмотр удостоверится не - не следует значению, и \b словоразделов эффективно заменить (?:^|\W) и (?:$|\W) не-захватом групп.

См. regex demo.

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