PHP:RegEx用于嵌套的{IF}{ENDIF}条件
我整天都在搜索一个正则表达式,它只匹配嵌套条件代码中的内部{IF}-{ENDIF}-语句。有人有主意吗 例如:PHP:RegEx用于嵌套的{IF}{ENDIF}条件,php,regex,if-statement,Php,Regex,If Statement,我整天都在搜索一个正则表达式,它只匹配嵌套条件代码中的内部{IF}-{ENDIF}-语句。有人有主意吗 例如: {IF bla}Text 1{ELSEIF ble}Text 2 {IF bli}Text 2.1{ELSE blo}Text 2.1{ENDIF} Main text end{/ENDIF} 我只是想 {IF bli}Text 2.1{ELSE blo}Text 2.1{ENDIF} 我尝试了\{IF.*\}.\{ENDIF\}is,但这不起作用,因为我只得到整个字符串 同样重要
{IF bla}Text 1{ELSEIF ble}Text 2 {IF bli}Text 2.1{ELSE blo}Text 2.1{ENDIF} Main text end{/ENDIF}
我只是想
{IF bli}Text 2.1{ELSE blo}Text 2.1{ENDIF}
我尝试了\{IF.*\}.\{ENDIF\}is
,但这不起作用,因为我只得到整个字符串
同样重要的是:代码可以有几行和换行符
bla、ble、bli等是动态的,可以不同这抓住了您的内部IF块:
/{IF(?:.*?(?={IF)(*SKIP)(*FAIL)|.*?){ENDIF}/
(279个步骤)
该模式使用(*跳过)(*失败)
和“取消资格”任何包含内部IF块的IF块。这样,您只能得到最里面的IF块
代码:()
输出:
{IF bli}Text 2.1{ELSE blo}Text 2.1{ENDIF}
或更快/更好地使用负前瞻:
/{IF(?!.*{IF).*?{ENDIF}/
(190步)内部IF-ELSE:
{IF(?..*{IF.*?}.*?{ENDIF}
从该位置向前看,并断言它不匹配(?!.{IF)
- 惰性量词
是在最早匹配时停止的指令?
< /P>我不认为ReXEP是这里的方法(类似于解析XML/HTML)。我会考虑解析文本手册(遍历文本,当你点击{你检查关键字)。这样你就可以自己建立一棵树,然后采取任何你需要的节点。谢谢,经过长时间的搜索和失败,我使用了这个解决方案。
/{IF(?!.*{IF).*?{ENDIF}/