我正在尝试找到一个好的表达式来替换任何以 :
"%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);