简单的任务正则表达式将任何“%function test%”替换为test


Simple task regex expression replacing any "%function test%" by 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);