Я использую TextMate для замены выражения [my_expression], состоящего из символов между открытыми и закрытыми скобками, на {my_expression}; поэтому я попытался заменить

\[[^]]*\]

От

{$1}

Регулярное выражение соответствует правильному выражению, но замена дает {$1}, так что переменная не распознается. Может у кого-то есть идея?

-1
user1611830 18 Апр 2016 в 19:53

2 ответа

Лучший ответ

Вы забыли экранировать символ, [^]] должно быть [^\]].

Также вам понадобится группа захвата. $1 - это обратная ссылка на 1st захват Group , и у вас не было групп захвата, поэтому используйте следующее регулярное выражение:

\[([^\]]*)\]

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


Однако этот RegEx короче:

\[(.*?)\]

Также заменяем на {$1}

Живая демонстрация на Regex101

2
Kaspar Lee 18 Апр 2016 в 16:57

Используйте группу захвата (...):

\[([^\]]*)\]

$1 - это обратная ссылка на текст, заключенный в [...].

Вот демонстрация регулярного выражения, а также Нумерованные обратные ссылки .

Также TextMate docs:

1. Элементы синтаксиса
группа (...)

20.4.1 Захваты
Для ссылки на захват используйте $n, где n - номер регистра захвата . Использование $0 означает полное совпадение.

А также:

  • Если вы хотите использовать [, -, ] в качестве обычного символа в классе символов, вы должны экранировать эти символы с помощью \.
1
Wiktor Stribiżew 18 Апр 2016 в 17:00