1

Я считаю, что это довольно сложно сделать, дело в следующем:

У меня есть строка в виде:

GlobalParameters::$docId = DocList::$PARTNERS;

И я хочу добавить строку _VIEW в конец символа. Проблема в том, что я хочу, чтобы не только соответствовал PARTNERS, но и любому другому символу, поэтому я попробовал это регулярное выражение:

Найти:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)\;

Заменить:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$(.*)_VIEW\;

Но я только что получил:

GlobalParameters::$docId = DocList::$(.*)_VIEW;

На всех матчах. Как я могу обойти это?

2 ответа2

0

Главное неверно, что соответствующее поле, разделенное ( и ) должно быть идентифицировано \1 в строке замены:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\1_VIEW\;

Стоит также отметить, что, хотя ваша реализация Geany не имеет этого значения по умолчанию, многие программы, использующие регулярные выражения, по умолчанию используют режим BRE (Basic Regular Expression), который требует \( и \) для разделения подвыражения поиска, как в:

GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$\(.*\)\;

Примечание: Geany начиная с v1.24 не требует экранирования скобок, поэтому вам нужно просто ( и ) для разделения соответствующих полей.

Мне встречаются другие, более простые строки поиска и замены, но, не видя контекста других строк в файле, я не уверен, что может быть удовлетворительным. Тем не менее, следующее должно быть в порядке:-

Поиск:

\(GlobalParameters\:\:\$docId\ \=\ DocList\:\:\$.*\)\;

Заменить:

\1_VIEW\;

Здесь вся строка, кроме следа ; совпадает и добавляется _VIEW .

0

Чтобы расширить ответ AFH, я сделал более сложный пример:

Строка для изменения:

abc: 123

Поиск:

(abc)\: (123)

Заменить (1def будет добавлен к первому выражению соответствия, а 456 - ко второму):

\1def \2456

Результат:

abcdef 123456

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