嗨,我在使用 php 重复正则表达式时遇到了一些问题。{{if(x=y)? {{ true do something || false do something else }}
我的 html 文件中有类似的字符串
。它将是某种基本的模板引擎。如果我使用
$matches=array();
$content = "{{if(x=y)? true do something || false do something else }}";
preg_match_all('/\{\{if\((.*?)\)\?(.*?)\|\|(.*?)\}\}/is',$content,$matches);
按我的预期返回结果。
Array(
[0] => Array
(
[0] => {{if(x=y)?
true do something
||
false do something else
}}
)
[1] => Array
(
[0] => x=y
)
[2] => Array
(
[0] => true do something
)
[3] => Array
(
[0] => false do something else
)
)
但是,如果该模式与另一个类似嵌套;
{{if(x=y)?
{{if(y=z)?
true do something
||
false do something else
}}
||
{{if(x=a)?
true do something
||
false do something else
}}
}}
它将第一个“}}”字符作为模式的结尾并失败
Array
(
[0] => Array
(
[0] => {{if(x=y)?
{{if(y=z)?
true do something
||
false do something else
}}
)
[1] => Array
(
[0] => x=y
)
[2] => Array
(
[0] => {{if(y=z)?
true do something
)
[3] => Array
(
[0] =>
false do something else
)
)
我想制作一个重复的正则表达式,因此在 true 或 false 的每个部分中,它应该检查匹配的内容是否再次具有相同的模式。If 的逻辑部分已经完成。我只需要一个正则表达式来匹配这些部分,这样我就可以遍历结果。根据我的正则表达式知识,这就是我迄今为止所能做的。编辑 更具描述性我需要一个正则表达式可以解析这样的东西。
{{if()?{{if()?{{if()?...||...}}||{{if()?...||...}}}}||{{if()?{{if()?...||...}}||{{if()?...||...}}}}}}
但我使用的正则表达式只能从第一个 {{if 到 first }} 它找到返回
{{if(){{if(){{if()...||...}}
这对于正则表达式是正确的。但是我怎样才能将正则表达式规则为“获取整个文本,找到 {{if()? 和 }} 之间的块直到最后,如果它不在末尾则忽略任何其他块”或“获取最外部的 {{if ()?||}} 块。谢谢