PHP正则表达式自定义字符串变量替换

时间:2019-02-07 10:42:53

标签: php regex

是否有一些解决方案,如何将该字符串解析为3个部分?

{ROW.{TABLE.{TEMP.lang}}}

对此

{ROW.{TABLE.{TEMP.lang}}}
{TABLE.{TEMP.lang}
{TEMP.lang}

例如,当我尝试替换TABLE时。变量

{TABLE\.(.+)} = 1 => {TABLE.{TEMP.lang}}} 2 => {TEMP.lang}}
{TABLE\.(.+?)} = 1 => {TABLE.{TEMP.lang} 2 => {TEMP.lang

谢谢。

1 个答案:

答案 0 :(得分:0)

您要尝试的是递归匹配。正如我已经在评论中指出的那样,对于herehere(如果适用)来说,类似的问题答案也可能对您有用。

针对您的情况,我针对您的情况改编了this answer,从而生成了以下RegEx:

(?=(\{(?>[^{}]+|(?1))+\}))

我用大括号代替了(上一个解决方案的)括号,然后将整个捕获组括起来为正向。自lookarounds don't consume any characters起,引擎将继续尝试匹配字符串。另外,如果您在捕获组内部的前瞻中包含断言,则表达式将“匹配”(但不使用),并且您可以从捕获组中检索它。这样,可以多次匹配您的模式,从而为您提供预期的结果。

Regex101演示https://regex101.com/r/nsypuX/1/