简单任务正则表达式通过测试替换任何“%function test%”

Simple task regex expression replacing any "%function test%" by test

我正在尝试找到合适的表达式来替换任何以 :

开头的字符串
"%function

并以 :

结尾
%"

中间字符串例如:

"%function test%" 应该 return

test 

和“%function test%”,“%function test%”应该return:

test,test

我试过了

preg_replace('/"%function (.*)?%"/', '',$string);

一开始我抱有很大的希望,因为我的第一个例子很好用,但多功能性不是很好。

有关更多信息,您可以在此处查看代码并尝试(一种 phpfiddle):http://sandbox.onlinephpfunctions.com/code/00232644b801271e2ffb2ddf4cd450ddffcb50c2

如有任何帮助,我们将不胜感激, 最好的问候。

通过在捕获组之外使用 ?,您可以将其设为可选。相反,你想要的是一个非贪婪的 * 所以你必须这样做。其他选择是 ([^%]+)

preg_replace('/"%function (.*?)%"/', '',$string);

您可以使用环顾四周

(?<="%function )[^%]+(?=%")

Regex Demo

preg_match_all( "/(?<=\"%function )[^%]+(?=%\")/", "\"%function test%\"", $matches);

会产生

Array ( [0] => Array ( 
                       [0] => test 
                      ) 
      ) 
%\s*\S+\s+(\S+?)\s*%

通过 </code> 尝试 this.Replace。查看演示。</p> <p><a href="https://regex101.com/r/wZ0iA3/8" rel="nofollow">https://regex101.com/r/wZ0iA3/8</a></p> <pre><code>$re = "/%\s*\S+\s+(\S+?)\s*%/im"; $str = "%function test%\n%function test%,% function test%"; $subst = ""; $result = preg_replace($re, $subst, $str);