得到所有出现的字符串并替换它们

Gab*_*iel 1 php regex preg-match-all

示例文本

this text will be left alone ##{class1}{arg1;arg2;arg3}## some other text and
another thingie ##{Class2}{]##
Run Code Online (Sandbox Code Playgroud)

目前我正在使用它'/\#\#\{(?P<class>.+)\}\{(?P<args>.+)\}\#\#/i'来匹配它,但我的问题是当这个正则表达式多次出现时,因为它甚至会匹配两个匹配模式之间的文本.

这是我的正则表达式的结果##{ClassName1}{arg1;arg2;arg3}## some other random ##{class2}{}##.

是否有更优雅的方法从字符串中提取##{class1}{arg1;arg2;arg3}####{Class2}{]##用相应类的输出替换它们?

我正在使用它来替换Class1和Class2的输出,其中参数介于第二组之间 {}


注意:如果第二组{}为空,则表示没有参数传递给第一组{}中具有名称的类

Vot*_*ple 5

问题是.+"贪婪" - 只要模式的其余部分仍然可以解决,它将消耗它可能的每个角色.

脏的通用解决方案是为了.+?满足满足模式其余部分所需的最少字符,并且在这种情况下可以工作.

但一般来说,写一些比具体而言更具体的东西更可取.+.在你的情况下,会[^}]+工作吗?也就是说,在{}符号之间,你可以有任意数量的不是结束的字符}.