Как найти и заменить одинарную кавычку в какой-либо строке? - PullRequest
2 голосов
/ 08 июля 2019

Потому что assert - проверяет, является ли утверждение FALSE в php после изменения версии 7.2, необходимо использовать строку, так как утверждение устарело с PHP 7.2.

И я хочу использовать replace in path функцию php storm с регулярным выражением, изменяявсе точки, где это было, как это выглядит, это регулярное выражение?

пример pioints:

assert('is_array($config)');
assert('is_string($location)');
assert('is_string($entityId)');

Я только что нашел и заменил первую кавычку, точно так же, как это .*?(\bassert\('\b)[^$]* заменить на assert(.Но как это будет с последней цитатой, я не знаю.

результат должен быть

assert(is_array($config));
assert(is_string($location));
assert(is_string($entityId));

с первой одинарной кавычкой Я нашел решение, нужно найти решение для последней одинарной кавычки

Любые идентификаторы?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Одним из вариантов совпадения только с одной кавычкой может быть использование \G для подтверждения позиции в конце предыдущего совпадения.Используйте \K, чтобы забыть то, что было в данный момент найдено, и затем сопоставить одинарную кавычку.

В замене используйте пустую строку.

(?:^.*?\bassert\(|\G(?!^))[^']*\K'(?=.*\);)

О шаблоне

  • (?: Группа без захвата
    • ^.*?\bassert\( Матч от начала строки не жадным образом, пока не встретится assert(
    • | Или
    • \G(?!^) Утверждение позиции в предыдущем матче, а не в начале
  • ) Закрыть группу без захвата
  • [^']*\K' Матч 0+ раз нет', забудьте, что было найдено, и сопоставьте '
  • (?=.*\);) Подтвердите, что справа - закрывающая скобка и ;

Regex demo

Другим способом может быть использование 3 групп захвата, сопоставьте ', который вы хотите удалить, и используйте группы в замене:

^(.*?\bassert\()'([^']+)'(.*)$

Regexдемо

1 голос
/ 08 июля 2019

Лучше начать с выражения с большим количеством границ, например:

.*?(\bassert\b)\s*\(('|")\s*([^'"]*?)\s*('|")\s*\)\s*;

Test

$re = '/.*?(\bassert\b)\s*\((\'|")\s*([^\'"]*?)\s*(\'|")\s*\)\s*;/s';
$str = 'assert ("  is_string($entityId)") ;';
$subst = '$1($3);';

echo preg_replace($re, $subst, $str);

Выражение объяснено на верхней правой панели этой демонстрации , если вы хотите продолжить изучение или изменить его, а в этой ссылке вы можете посмотреть, как она будет соответствовать если хотите, с некоторыми примерами ввода шаг за шагом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...