簡體   English   中英

PHP正則表達式查找嵌套模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM