Количество экземпляров шаблона в регулярном выражении в качестве переменной замены - PullRequest
1 голос
/ 03 февраля 2020

У меня есть следующее выражение:

echo '    <p>'.$variable.'</p>'.PHP_EOL;

и мне нужно регулярное выражение, которое заменит его на:

echoln(4,'<p>'.$variable.'</p>');

4 представляет количество префиксов пробелов (произвольно). Проблема здесь в том, как подсчитать количество префиксов пробелов (4) и использовать это количество в качестве параметра в строке замены.

Я попытался выполнить поиск по:

echo '([ ]*)(.*)'\.PHP_EOL;

и использовать строку замены:

echoln($1,'$2');

Но вместо пробелов здесь, во-первых, мне нужно количество (вхождений) пробелов.

1 Ответ

0 голосов
/ 04 февраля 2020

Поскольку вы уже используете PHP, вы можете использовать скрипт PHP для выполнения замены, используя preg_replace_callback, чтобы позволить вам вычислить длину пробелов и вставить ее в замену:

$text = 'echo \'    <p>\'.$variable.\'</p>\'.PHP_EOL;';

echo preg_replace_callback("/echo\s+'(\s*)(.*)'\s*\.\s*PHP_EOL;/", function ($m) {
    return "echoln(" . strlen($m[1]) . ", '$m[2]');";
}, $text);

Вывод:

echoln(4, '<p>'.$variable.'</p>');

Демонстрация на 3v4l.org

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