Найти все вхождения определенного символа в строке между скобками, которая идет после другой строки (REGEX) - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь заменить / на ., используя Regex (и Atom Editor), так что $app->call( 'text/'. $var .'/e ); становится $app->call( 'text.'. $var .'.e );

Но пока без удачи, вот что япридумал:

(?<=\()[^)]?[\/]+(?=\))

По какой-то причине он ловит косую черту только тогда, когда это единственный символ строки: https://regex101.com/r/zgPl5F/1

Что мне здесь не хватает?

Моя идея состоит в том, чтобы нацелить определенный класс на массовое редактирование параметров, передаваемых его функциям (в редакторе Atom), чтобы $app->xxx(*/*) становилось $app->xxx(*.*) (где xxx - это всегда имя функции). Так что в целом:

^(\$app->\w)+(?<=\()[^)]?[\/]+(?=\))

Редактировать: на основе ответа @ Wiktor Я попробовал это, но это не работает:

^(\$app->\w)+(\/(?=[^()]*\)))+

NB. Это не совсем тот же вопрос.

1 Ответ

1 голос
/ 25 октября 2019

Вы можете использовать следующее решение в Notepad ++ или SublimeText:

(?:\G(?!\A)|^\$app->\w+\()[^()]*?\K/(?=[^()]*\))

См. Демонстрационную версию regex .

Подробности

  • (?:\G(?!\A)|^\$app->\w+\() - конец предыдущего совпадения (\G(?!\A)) или (|) начало строки, $app->, 1+ слов и ( (см. ^\$app->\w+\()
  • [^()]*? - 0 или более, но как можно меньше символов, отличных от ( и )
  • \K - оператор сброса совпадения
  • / - косая черта
  • (?=[^()]*\)) - сопровождается 0+ символами, отличными от ( и ), а затем ).
...