#java #regex
#java #регулярное выражение
Вопрос:
У меня есть это regex
, которое используется для проверки телефонных номеров.
^\(?(\d{2,3})\)?[-(). ]?(\d{2,3})[-(). ]?(\d{4})$
(Да, я знаю, что это не идеально, но мне все равно). Я просто использую его для замены телефонных номеров другой строкой, скажем ###
, для удаления конфиденциальной информации. Так что ложные срабатывания — это нормально.
Это работает, когда строка, которую я ищу, является только номером телефона. Это работает:
String PHONE_PATTERN = "^\(?(\d{2,3})\)?[-(). ]?(\d{2,3})[-(). ]?(\d{4})$";
String phone = "123-123-1234";
System.out.println(s.replaceAll(PHONE_PATTERN, "###")); //prints '###'
Но с окружающим текстом это не работает:
String PHONE_PATTERN = "^\(?(\d{2,3})\)?[-(). ]?(\d{2,3})[-(). ]?(\d{4})$";
String phone = "some other text 123-123-1234";
System.out.println(s.replaceAll(PHONE_PATTERN, "###"));
Под не работает, я имею в виду, что текст печатается без изменений.
Что мне нужно изменить в моем регулярном выражении, чтобы заставить это работать, чтобы второй пример печатал
some other text ###
Комментарии:
1. Святая мать регулярных выражений, Бэтмен.
2.Как вы в конечном итоге
^
иamp;
автоматически при создании вашего регулярного выражения? Когда я пишу регулярное выражение, я должен активно думать о том, должен ли какой-либо из них быть там, например: «Нужно ли мне сопоставлять это только в начале строк / строк?»3. @ADTC Я полный новичок, когда дело доходит до регулярных выражений. Я просто работал над тем, что нашел на этом сайте: zparacha.com /…
Ответ №1:
Удалите ^
и $
из начала и конца вашего выражения. Эти символы соответствуют началу и концу строки, но вы не хотите, чтобы номер телефона был единственным содержимым строки, поэтому их следует удалить.
Ответ №2:
Вместо якорей ^
и $
использования b
(границы слова):
String PHONE_PATTERN = "\b\(?(\d{2,3})\)?[-(). ]?(\d{2,3})[-(). ]?(\d{4})\b";
Ответ №3:
Вам нужно удалить привязки начала строки ^
и конца строки $
, при наличии обоих из них вы сопоставляете всю строку от первого символа в строке до последнего символа в строке.
- Шаблон
^
должен соответствовать подстроке, начинающейся с первого символа в строке. - Шаблон
$
должен соответствовать подстроке, заканчивающейся последним символом в строке.
Если вы хотите выполнить поиск шаблона, который находится на одном или другом конце, именно тогда вам нужно использовать якоря.