3

Я использую Notepad++ и изучаю регулярные выражения, но мне интересно, почему некоторые из мета-символов не работают в редакторе, то есть звездочка (*) и плюс (+).

Например:

Дерево выглядит потрясающе с листьями и цветами.

Регулярное выражение: [tre *]

Приведенное выше регулярное выражение не работает в Notepad++, как ожидалось.

2 ответа2

11

моя цель состоит в том, чтобы соответствовать tre и его предыдущим символам

Хорошо в вашем примере The tree is looking awesome with leaves and flowers. фрагменту слова tre не предшествуют никакие символы в одном и том же слове, ему предшествуют символы, являющиеся частью более ранних слов. Это делает ваш вопрос немного двусмысленным.

Чтобы сопоставить любые символы, за которыми следуют "t", "r", "e", я бы использовал .*tre .

Чтобы сопоставить "t", "r", "e" и любые другие символы, я бы использовал tre.*

Чтобы сопоставить слово, начинающееся с "t", затем "r", затем "e", я бы использовал tre\w*

Мое регулярное выражение [tre *]

Это соответствует одному символу, характер согласованного может быть любым одним из четырех указанных. Внутри [] метасимвол * обрабатывается как обычный символ (потому что это наиболее полезный способ обработки в этом контексте).

Скобки [] предназначены для указания одного символа в тексте, который может иметь несколько возможностей. Например, если вы хотите сопоставить одно из слов « Tree или « tree вы можете использовать [Tt]ree что означает совпадение символа с буквой T или t за которым следует второй символ, за которым следует r а затем третий символ, за которым следует e четвертой буквой e .

Вы можете сопоставить Tree и tree используя .ree но . соответствует любому отдельному символу, поэтому RE также будет соответствовать free и другим словам, которые вы можете не захотеть. [] предоставляет вам возможность быть более конкретным, чем . при указании значений одного символа в тексте, который вы хотите сопоставить

2

* и + не являются метасимволами в классе символов. Это верно для регулярных выражений в целом, а не только для Notepad++. [a*+] означает «соответствовать одиночному a , * или + ».

Если вы хотите сопоставить любое количество символов t , r или e , используйте [tre]* . Это будет соответствовать любому из них:

tttrreerer
rrrrrr
er
t
(empty line)

Если вы хотите сопоставить одиночное t , одиночное r или любое число e s, используйте ([tr]|e*) или (t|r|e*) . Это регулярное выражение соответствует следующим строкам:

t
r
eeeeeeeee
(empty line)

И не будет соответствовать, например. tre .

Вот хороший учебник по регулярным выражениям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .