что эквивалентно метасимволу границы слова в Java?

#java #regex

#java #регулярное выражение

Вопрос:

Я сейчас изучаю регулярное выражение и путаюсь с b или граница слова определена.

Я знаю, что d равно [0-9] и D равно [^0-9] , w равно [a-zA-Z0-9] и W равно [^a-zA-Z0-9] .

Я перепробовал так много разных комбинаций, чтобы создать эквивалент для b , но безуспешно.

Мой вопрос в том, можем ли мы создать эквивалент b ? Пожалуйста, предоставьте простое объяснение.

Комментарии:

1. b допустимо в Java, просто убедитесь, что используете \b

2. Зачем вам нужен эквивалент word boundary? Просто используйте \b .

3. я не спрашиваю о том, как использовать word boundary, я знаю, что в java вы должны использовать escape char для записи b , но я спрашиваю, каков его эквивалент? мне просто любопытно.

4. Если бы это было легко воспроизвести, b используя какую-либо другую конструкцию, b это было бы недоступно в первую очередь.

5. На самом деле, вы ошибаетесь. Ни одна из ваших замен не верна. d не равно [0-9] , поскольку оно может принимать или не принимать во внимание цифры Юникода (зависит от реализации); w разрешает _ тоже, поэтому W запрещает _ также и т.д.

Ответ №1:

У вас есть несколько вариантов:

Вариант 1: использование как положительных, так и отрицательных поисковых систем

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

Смотрите демонстрацию.

Вариант 2: использование только положительных поисковых систем

 (?:(?<=W|^)(?=w)|(?<=w)(?=W|$))
  

Смотрите демонстрацию.

Недостаточно проверить, что следующий символ является W (например), как предполагает другой ответ с (?=W) , потому что W должен соответствовать символу, но b работает в начале или конце строк, где нет символа для сопоставления. Чтобы исправить это, регулярное выражение в варианте 2 вводит чередование с началом и концом строковых утверждений ^ и $

Ответ №2:

Непроверенный эквивалент для b:

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

Это утверждения нулевой ширины, позволяющие заглянуть в прошлое и заглянуть вперед. Это то, что происходит на границе слова.