Обрабатывать часть выражения Regex как не специальные символы

390
Dan W

Допустим, у меня есть выражение регулярного выражения, использующее некоторые специальные символы, но также часть с «обычным» текстом, в котором, как оказалось, есть некоторые символы. Допустим, я слишком ленив, чтобы начать избегать каждого «потенциального» msgstr "специальный символ в части" обычный текст ".

Как я могу заключить «нормальный» текстовый бит, чтобы Regex не начинал подбрасывать, когда думает, что натолкнулся на специальный символ (хотя на самом деле это не так)?

В качестве примера, скажем, я ищу текст:

.*Hello it's true that ([6*.5]^2=9),

Я, конечно, не хочу кропотливо использовать escape-символ каждый раз, когда какой-либо из специальных символов появляется в этом разделе математики (или апостроф в «не»). С другой стороны, я действительно хочу рассматривать .*бит в начале как специальные символы.

Так можно ли заключить этот Hello it's true that ([6*.5]^2=9)раздел так, чтобы Regex рассматривал его как обычный текст, а не как специальный?

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

3

2 ответа на вопрос

1
Thomas Dickey

Some tools allow you to change whether special characters must be escaped by default. For instance, vi (and clones) has a magic mode which controls this. That can let you reduce the amount of escaping needed.

Вау, так что в спецификации по умолчанию ничего нет? Только одна эта вещь заставляет меня ненавидеть Regex больше, чем что-либо еще, что могло бы быть неправильно с ним. Dan W 8 лет назад 0
Кто-то может вспомнить другой случай. Кстати, «магическая» особенность vi отражена в различиях между BRE и ERE (grep vs egrep) и т. Д. Thomas Dickey 8 лет назад 0
Я узнал, что это возможно с большинством ароматов Regex в конце концов. Горечь начинает исчезать ... :) Смотрите мой собственный ответ на этот вопрос. Dan W 8 лет назад 0
Не совсем: это версия Perl, предоставляемая pcre, и последние версии Notepad ++. Регулярные выражения POSIX этого не делают (хотя может быть какой-то аспект, который я упускаю из виду). Perl не POSIX, конечно. Thomas Dickey 8 лет назад 0
1
Dan W

Try \Q to start a literal, and end with \E.

This works with many flavours of Regex, though Java may have problems for instance.

Information obtained from: http://www.regular-expressions.info/characters.html

Я осторожно беру сайты, подобные этим. [Notepad ++ 6 примечания к выпуску] (https://notepad-plus-plus.org/news/notepad-6.0-release.html) будет хорошей отправной точкой. Thomas Dickey 8 лет назад 0

Похожие вопросы