2013-03-10 7 views
0

Сейчас я изучаю регулярное выражение на Java, и у меня есть вопрос о границах слов. Поэтому, когда я ищу границы слов в Java Regular Expression, я получил этот \ b, который принимает слово, ограниченное символом без слова, поэтому это регулярное выражение \b123\b примет эту строку 123 456, но отклонит 456123456. Теперь я обнаружил, что условие, подобное слову [email protected]#@%123^^%$# или "123", по-прежнему принимается регулярным выражением выше. Существуют ли какие-либо границы/паттерны слов, которые отвергают слово, ограниченное не буквенно-цифровым (кроме пробела), как пример выше?граница слова, которая отклоняет ведущий/конец не-буквенно-цифровой символ

+0

Под каким условием вы хотите принять '123'? '123' в' 123 456' также ограничен не-буквенно-цифровым. – nhahtdh

+0

EDIT: Я имею в виду ограниченное пространство, поэтому '456 123 456' все еще принято, но' 654123789' будет отклонен, хотя он содержит 123 – user1749623

ответ

1

Вы хотите использовать \s вместо \b. Это будет искать пробельный символ, а не границу слова.

Если вы хотите, чтобы ваш первый пример 123 456 был подходящим, вам также понадобится использовать якоря, чтобы принять 123 в непосредственном начале или конце строки. Это можно сделать с помощью (\s|^)123(\s|$). Карат ^ соответствует началу строки и $ соответствует концу строки.

+0

. Я пробовал это, но он не возвращает никакого результата с тем же тестовым примером выше – user1749623

+0

Что вы имеете в виду «нет результата вообще»? Каков фактический код, который вы вызываете? –

+0

Выражение исправлено. Неправильно использовать класс символов. Класс символов заставил матчи искать символы^и $, а не требуемые якоря. –

1
(?<!\S)123(?!\S) 

(?<!\S) соответствует положение, которое не предшествует по символу. (отрицательный lookbehind)

(?!\S) соответствует позиции, которая не , за которой следует несимметричным символом. (отрицательный результат)

Я знаю, что это кажется безнадежно сложным, но это потому, что \b скрывает много сложности. Это эквивалентно следующему:

(?<=\w)(?!\w)|(?=\w)(?<!\w) 

... смысл позиции, что это предшествует на слово характер и не с последующим одним или позиция, это с последующим на слово характер и не предшествуют одним.

+0

+1 для правильного ответа. – stema

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

  • Нет связанных вопросов^_^