用正则表达式替换大括号中的标记,甚至是嵌套标记

时间:2010-04-27 18:29:57

标签: php regex

示例

preg_replace('/\{[a-zA-Z.,\(\)0-9]+\}/', 'Replaced', 'Lorem ipsum dolor sit {tag1({tag2()})}, consectetur adipiscing elit.');

结果:

Lorem ipsum dolor sit {tag1(Replaced)},consectetur adipiscing elit。

问题

正如您所看到的,“tag2”已被替换,但我想替换“tag1” 有谁知道我怎么能这样做?

(在某些情况下,它可能是这样的:{tag1({tag2({tag3()})})})等等。)

顺便说一下,我实际上正在使用preg_replace_callback,但更容易用preg_replace显示它

以下是您可以测试代码的网站:http://www.spaweditor.com/scripts/regex/index.php

3 个答案:

答案 0 :(得分:1)

您需要在字符集中添加花括号。这是我使用的模式:

/\{[a-zA-Z.,\(\)\{\}0-9]+\}/

结果如下:

"Lorem ipsum dolor sit Replaced, consectetur adipiscing elit."

答案 1 :(得分:1)

一旦你开始讨论匹配嵌套模式(例如:匹配像(foo (bar) fu)这样的内部括号内组),那么正则表达式就是错误的工具。正则表达式是无状态的,在这种情况下,意味着它们无法计算打开多少括号。

如果您想要做类似的事情,可能需要查看parser

答案 2 :(得分:0)

您可能要使用T-Regx

services.AddMvc().ConfigureApplicationPartManager(apm =>
    {
    foreach (var b in new CompiledRazorAssemblyApplicationPartFactory().GetApplicationParts(AssemblyLoadContext.Default.LoadFromAssemblyPath(".../ViewAssembypath/file.Views.dll")))
        apm.ApplicationParts.Add(b);
    });