Php 如何使用正则表达式替换字符串的外部内容?

Php 如何使用正则表达式替换字符串的外部内容?,php,regex,html,laravel,visual-studio-code,Php,Regex,Html,Laravel,Visual Studio Code,假设我有代码(或字符串): 然后,假设我要替换 { if 1 == 1 }Middle Part{ /if } 与 从概念上讲,我需要应用哪个工具(或正则表达式原则)来替换我想要保留的文本周围的所有内容 我想找到以{if…}开头,以{/if}结尾的字符串,然后将第一个值{if…}替换为@if(…),第二个值{/if}替换为@endif,但我不想触及“中间部分”文本。我还需要首先查找以{if'开头,以'}结尾的字符串,并替换为@if('and') 从象征意义上讲,若我有ABC,我希望有a部分、B

假设我有代码(或字符串):

然后,假设我要替换

{ if 1 == 1 }Middle Part{ /if }

从概念上讲,我需要应用哪个工具(或正则表达式原则)来替换我想要保留的文本周围的所有内容

我想找到以
{if…}
开头,以
{/if}
结尾的字符串,然后将第一个值
{if…}
替换为
@if(…)
,第二个值
{/if}
替换为
@endif
,但我不想触及“中间部分”文本。我还需要首先查找以
{if'开头,以'}
结尾的字符串,并替换为
@if('and')

从象征意义上讲,若我有ABC,我希望有a部分、B部分和C部分的映射,但只将a和C替换为它们的映射,a->X和C->Z

我基本上是在尝试将模板文件从一种模板语言快速转换为另一种模板语言(在本例中,是Smarty(.tpl)到Blade(.Blade.php))

除了简单的文本查找和替换之外,我还做了一些正则表达式的工作。我知道我可以通过编程来实现这一点,但我想知道是否有一个工具可以处理这些模式


提前感谢。

您可以使用此正则表达式匹配最小结构(如示例字符串),并使用
(.*)
将两个变量部分捕获为两个组

然后替换为以下内容,这将保留您的可变部分,并将所有内容放入新结构中,如您所愿

@if($1)$2@endif

印刷品

@if(1 == 1)Middle Part@endif
另一方面,如果您的结构不是嵌套的,您应该只使用它。对于嵌套的语法分析器,最好编写自己的自定义语法分析器,因为在这种情况下正则表达式是不够的

{\s*if\s*(.*?)\s*}(.*?){\s*\/if\s*}
@if($1)$2@endif
$s = '{ if 1 == 1 }Middle Part{ /if }';
echo preg_replace('/{\s*if\s*(.*?)\s*}(.*?){\s*\/if\s*}/', '@if($1)$2@endif', $s);
@if(1 == 1)Middle Part@endif