我整天都在搜索一个RegEx,它只匹配嵌套条件代码中的内部{IF} - {ENDIF} -Statement。有没有人有想法?
例如:
{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等是动态的,可以有所不同答案 0 :(得分:1)
这会抓住你的内部IF块:
UPDATE
Demo(279步)
该模式使用Killed: 9
和“取消资格”任何包含内部IF块的IF块。这样你只能获得最里面的IF块。
代码:(Demo)
/{IF(?:.*?(?={IF)(*SKIP)(*FAIL)|.*?){ENDIF}/
输出:
(*SKIP)(*FAIL)
使用否定前瞻更快/更好:
$string='{IF bla}Text 1{ELSEIF ble}Text 2 {IF bli}Text 2.1{ELSE blo}Text 2.1{ENDIF} Main text end{/ENDIF}';
echo preg_match('/{IF(?:.*?(?={IF)(*SKIP)(*FAIL)|.*?){ENDIF}/',$string,$match)?$match[0]:'fail';
Demo(190步)
答案 1 :(得分:1)