Сейчас я изучаю регулярное выражение на Java, и у меня есть вопрос о границах слов. Поэтому, когда я ищу границы слов в Java Regular Expression, я получил этот \ b, который принимает слово, ограниченное символом без слова, поэтому это регулярное выражение \b123\b
примет эту строку 123 456
, но отклонит 456123456
. Теперь я обнаружил, что условие, подобное слову [email protected]#@%123^^%$#
или "123"
, по-прежнему принимается регулярным выражением выше. Существуют ли какие-либо границы/паттерны слов, которые отвергают слово, ограниченное не буквенно-цифровым (кроме пробела), как пример выше?граница слова, которая отклоняет ведущий/конец не-буквенно-цифровой символ
ответ
Вы хотите использовать \s
вместо \b
. Это будет искать пробельный символ, а не границу слова.
Если вы хотите, чтобы ваш первый пример 123 456
был подходящим, вам также понадобится использовать якоря, чтобы принять 123
в непосредственном начале или конце строки. Это можно сделать с помощью (\s|^)123(\s|$)
. Карат ^
соответствует началу строки и $
соответствует концу строки.
. Я пробовал это, но он не возвращает никакого результата с тем же тестовым примером выше – user1749623
Что вы имеете в виду «нет результата вообще»? Каков фактический код, который вы вызываете? –
Выражение исправлено. Неправильно использовать класс символов. Класс символов заставил матчи искать символы^и $, а не требуемые якоря. –
(?<!\S)123(?!\S)
(?<!\S)
соответствует положение, которое не предшествует по символу. (отрицательный lookbehind)
(?!\S)
соответствует позиции, которая не , за которой следует несимметричным символом. (отрицательный результат)
Я знаю, что это кажется безнадежно сложным, но это потому, что \b
скрывает много сложности. Это эквивалентно следующему:
(?<=\w)(?!\w)|(?=\w)(?<!\w)
... смысл позиции, что это предшествует на слово характер и не с последующим одним или позиция, это с последующим на слово характер и не предшествуют одним.
+1 для правильного ответа. – stema
Под каким условием вы хотите принять '123'? '123' в' 123 456' также ограничен не-буквенно-цифровым. – nhahtdh
EDIT: Я имею в виду ограниченное пространство, поэтому '456 123 456' все еще принято, но' 654123789' будет отклонен, хотя он содержит 123 – user1749623