Подтвердить что ты не робот

Notepad ++ Regex Backreference синтаксис в Search/Replace -\1 или $1

Я попытался использовать Notepad ++ Search/Replace с помощью регулярного выражения, чтобы заменить определенные слова более короткими версиями этих слов.


Я использовал следующее регулярное выражение для соответствия каждому слову, которое заканчивается на er (но не er как слово) - и замените соответствующие слова теми же словами минус окончание r, используя обратную ссылку:

Find what: ([a-zA-z]+e)r

Replace with: $1

Но он не заменяет совпадающие слова, даже если он их находит.

Однако, если я изменил синтаксис обратной ссылки на это:

Replace with: \1

Все работает нормально.


Почему не работает backreference $1?

В чем разница между двумя формами backrefernce - \1 и $1?

4b9b3361

Ответ 1

Notepad ++ более ранние версии (v5.9.8 и ранее) поддерживали только стандартные POSIX Регулярные выражения. Тем не менее, полный PCRE (регулярное выражение Perl Compatible Regular Expression) Поддержка поиска/замены была добавлена ​​в версии 6.0:

Новые функции и улучшения в Notepad ++ 6.0:

  • Поддерживается PCRE (регулярные выражения, совместимые с Perl).

Это означает, что если вы используете Notepad ++ v6.0 или любую новую версию (например, v6.1.5), вы можете использовать синтаксис PCRE и использовать $1 вместо \1 для обратной ссылки, но он выиграл ' t быть совместимым с более ранними версиями Notepad ++ (до версии 6.0). Помимо этого, они похожи.

Подробнее о различиях синтаксиса backreference и причинах поддержки нового синтаксиса см. в Синтаксис Backreferences в строках замещения (почему знак доллара?).

Полезный учебник по использованию регулярных выражений в Notepad ++ можно найти здесь.