2014-08-28 2 views
0

Мне нужно написать RegEx, чтобы соответствовать строке «1-234-5678», если вокруг нее нет тире символов.RegEx, соответствующий автономной строке с дефисами

У меня есть следующий RegEx:

\b\d\-\d{3}\-\d{4}\b 

Теперь это работает отлично и матчи "1-234-5678" правильно в приведенных ниже строках:

  • текста 1-234-5678 текста
  • 111 1-234-5678 1212

Регулярное выражение также правильно НЕ соответствует "1-234-5678" в приведенных ниже строках:

  • text1-234-5678text
  • 1111-234-56781212

Но проблема в том, что она также соответствует в следующих строках:

  • текст-1-234- 5678-текст
  • 111-1-234-5678-1212

Это потому, что \b соответствует до и после тире.

Как я могу устранить совпадения, если есть тире спереди или после данных?

+0

Заменить '\ b' с' \ s'? – mishik

+0

Это означает, что перед ним должно быть пространство и после него, и пространство будет частью матча. Нехорошее решение. – Daniel

+0

?: \ S можно использовать. – vks

ответ

1

Используйте отрицательный и отрицательный просмотра назад опережения, чтобы проверить, является ли указанное выше формат не предшествует и за которым следует символ -,

(?<!-)\b\d\-\d{3}\-\d{4}\b(?!-) 

DEMO

+0

Вот оно. Отлично, танки. – Daniel

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