\b
– это утверждение нулевой ширины, означающее границу слова. Эти позиции символов (взятые из этой ссылки) считаются границами слов:
- Перед первым символом в строке, если первый символ является символом слова.
- После последнего символа в строке, если последний символ является символом слова.
- Между двумя символами в строке, где один является символом слова, а другой не является символом слова.
Символы слов, конечно, любые \w
. s
— это символ слова, а '
— нет. В приведенном выше примере область между '
и s
является границей слова.
Строка "Jon's"
выглядит так, если выделить якоря и границы (первая и последняя \b
встречаются в тех же позициях, что и ^
и $
): ^Jon\b'\bs$
Отрицательное утверждение просмотра назад (?<!s)\b
означает, что оно будет соответствовать границе слова только в том случае, если ей не предшествует буква s
(т. е. символ последнего слова не является s
). Таким образом, он ищет границу слова при определенных условиях.
Поэтому первое регулярное выражение работает так:
\b\w+
соответствует первым трем буквам J
o
n
.
На самом деле между n
и '
есть еще одна граница слова, как показано выше, поэтому (?<!s)\b
соответствует этой границе слова, поскольку ему предшествует n
, а не s
.
Поскольку достигнут конец шаблона, результирующее совпадение равно Jon
.
Дополнительный класс символов [^s]\b
означает, что он будет соответствовать любому символу, кроме буквы s
, за которой следует граница слова. В отличие от приведенного выше, здесь ищется один символ, за которым следует граница слова.
Поэтому второе регулярное выражение работает так:
\b\w+
соответствует первым трем буквам J
o
n
.
Поскольку '
не является буквой s
(она соответствует классу символов [^s]
) и за ней следует граница слова (между '
и s
), она соответствует.
Поскольку достигнут конец шаблона, результирующее совпадение равно Jon'
. Буква s
не соответствует, потому что граница слова перед ней уже совпала.
person
BoltClock
schedule
02.09.2011