Ленивый квантификатор здесь не поможет тому, что вы хотите. Посмотрим, что происходит.
Движок регулярных выражений запускается в начале строки. Сначала пытается соответствовать a
. Это невозможно, но это не проблема, поскольку a
является необязательным.
Затем, есть ленивый \W*?
, поэтому механизм регулярных выражений пропускает его, но запоминает текущую позицию.
Затем он пытается сопоставить b
. Он не может, поэтому он возвращается и успешно сопоставляет ,
с \W*?
. Затем он продолжает пытаться сопоставить b
(из-за ленивого квантификатора). Это все еще не может и возвращается назад. Это повторяется несколько раз, пока, наконец, двигатель регулярных выражений не достигнет b
. Теперь совпадение завершено - механизм регулярных выражений объявляет об успехе.
Таким образом, регулярное выражение работает так, как указано, но не так, как предполагалось. Теперь вопрос: что именно вы хотите сделать регулярное выражение?
Например, если вы действительно хотите:
Совпадение b
в одиночку, если ему не предшествует a
и некоторые несловарные символы, в этом случае сопоставьте все от a
до b
, затем используйте
b|a\W*b