Жадность работает слева направо, но не иначе. Это в основном означает «не совпадать, если вы не смогли сопоставить». Вот что происходит:
- Движок регулярных выражений соответствует
<br
в начале строки.
.*?
пока игнорируется, это ленивый.
- Попробуйте сопоставить
>
, и все получится.
- Попробуйте сопоставить
\w
и не получится. Теперь это интересно - двигатель начинает движение назад и видит правило .*?
. В этом случае .
может соответствовать первому >
, поэтому есть надежда на это совпадение.
- Это продолжается до тех пор, пока регулярное выражение не достигнет косой черты. Тогда
>\w
может совпадать, но $
не удается. Опять же, двигатель возвращается к ленивому правилу .*
и продолжает сопоставляться, пока не совпадет с <br><br />A<br />B
К счастью, есть простое решение: заменив <br[^>]*>\w$
, вы не разрешите сопоставление за пределами ваших тегов, поэтому оно должно заменить последнее вхождение.
Строго говоря, это плохо работает для HTML, поскольку атрибуты тега могут содержать >
символов, но я предполагаю, что это всего лишь пример.