[英]php regex finding nested patterns
我嘗試從html文件讀取foreach循環。 例如:
{foreach $foo as $bar}
{$bar->getName()}
{endforeach}
// but also nested loops
{foreach $foo as $bar}
{foreach $bar as $b}
{$b->getName()}
{endforeach}
{endforeach}
// with regex
preg_match_all('/{foreach(.*?)}(.){endforeach}/us',$html, $matches, PREG_SET_ORDER
在嘗試了我對這個偉大的regex101.com網站在這里最好的... 看例子
在這個例子中,至少我得到了兩次比賽。
雖然我也想嵌套部分。
但是,當我在PHP應用程序中使用此正則表達式時,它將返回一個空數組。
只要在第二組中使用點(.)
,就不會返回任何內容,這與regex101.com上的內容不同
可能是php7問題嗎? 請幫忙
您是否已經嘗試過類似的方法:
function parseForeach(s) { let [, varName, arrayName, body] = (/(?:{foreach\\s?(\\$\\w+)\\s+(?:as)\\s+(\\$\\w+)})\\s+{(.*)}\\s+(?:{endforeach})/g.exec(s) || []); ; console.log({varName, arrayName, body}); } var tpl = ` {foreach $foo as $bar} {$bar->getName()} {endforeach} // but also nested loops {foreach $foo as $bar} {foreach $bar as $b} {$b->getName()} {endforeach} {endforeach} `; parseForeach(tpl);
我意識到這是錯誤的方法。 我不需要嵌套順序的它們。 現在,我用/{((\\w+)(.*?))}
全部獲取,然后進行所有str替換以獲取有效的php字符串。 –菲茨·帕特里克(FitzPatrick)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.