Что не так с этим регулярным выражением? - PullRequest
0 голосов
/ 19 марта 2009

Это почти наверняка что-то действительно глупое, что я упустил из виду, но я в тупике. Следующее выражение в стиле C # должно соответствовать номерам телефонов (их ограниченное подмножество, но это всего лишь тестирование ...):

^[0-9]{3}-[0-9]{3}-[0-9]{4}$

Строка поиска выглядит следующим образом:

978-454-0586\r\nother junk\r\nmore junk\r\nhttp://www.google.com\r\n

Выражение соответствует номеру телефона, когда он изолирован, но не рядом с другими вещами. Например, если после телефона все откинуть, он просто отлично работает.

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

Спасибо!

Ответы [ 5 ]

5 голосов
/ 19 марта 2009

Символы ^ и $ означают «начало строки» и «конец строки» соответственно. Избавьтесь от них, если вы хотите найти соответствие в середине строки.

4 голосов
/ 19 марта 2009

"$" в регулярном выражении соответствует концу строки. Если вы удалите это, регулярное выражение должно работать правильно, хотя если у вас есть «Foo978-454-0586», оно не будет работать, так как «^» соответствует началу строки.

3 голосов
/ 19 марта 2009

Телефонные номера всегда на своих собственных линиях? Если это так, добавьте RegexOptions.Multiline в ваш конструктор Regex. Без этого regex.match использует начало и конец строки для ^ и $.

1 голос
/ 19 марта 2009

Проблема в том, что "^" и "$" заставляют его совпадать только в начале и конце строки.

Удалите эти два тега и посмотрите, как вы идете.

1 голос
/ 19 марта 2009

$ означает конец строки, а не конец строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...