Я пытаюсь найти хорошее выражение для замены любой строки, начиная с:
"%function
и заканчивается:
%"
с помощью строки inbetween, например:
"% function test%" должен вернуться
test
и "% function test%", "% function test%" должен возвращать:
test,test
Я попробовал это
preg_replace('/"%function (.*)?%"/', '$1',$string);
Сначала у меня была большая надежда, потому что мой первый пример отлично работает, но с множеством функций не так велик.
Для получения дополнительной информации вы можете увидеть код и попробовать здесь (своего рода phpfiddle): http://sandbox.onlinephpfunctions.com/code/00232644b801271e2ffb2ddf4cd450ddffcb50c2
Любая помощь будет принята с благодарностью, с наилучшими пожеланиями.
Используя ?
вне группы захвата, вы делаете это необязательным. Вместо того, что вы хотите, это не жадный *
так что вы должны сделать. Другой выбор - сделать ([^%]+)
preg_replace('/"%function (.*?)%"/', '$1',$string);
Вы можете использовать внешний вид
(?<="%function )[^%]+(?=%")
preg_match_all( "/(?<=\"%function )[^%]+(?=%\")/", "\"%function test%\"", $matches);
Будет производить
Array ( [0] => Array (
[0] => test
)
)
%\s*\S+\s+(\S+?)\s*%
Попробуйте это. Замените его на $1
Прочтите демоверсию.
https://regex101.com/r/wZ0iA3/8
$re = "/%\\s*\\S+\\s+(\\S+?)\\s*%/im";
$str = "%function test%\n%function test%,% function test%";
$subst = "$1";
$result = preg_replace($re, $subst, $str);