嗨我正在處理一個CMS中的錯誤,我希望有人可以給我一些這個凌亂的正則表達式的幫助!我需要刪除{{頁面中的所有內容? }}標籤(其中'page'是一個動態詞彙),包括任何內嵌的{{tags}} .- {{links? }}PHP的正則表達式忽略嵌套標籤
在下面的代碼中,正則表達式應該刪除{{homepage中的所有內容? }}標籤:
<div id="main">
<div id="left">
{{menu1}}<br />
{{homepage?
<img src="images/{{timenow}}.gif" width="177" height="217" alt="{{imgname}}" id="biglogo" />
}}
{{links?
<b>LINKS</b>
}}
</div>
{{menu2}}
</div>
這是我到目前爲止。因爲它看到timenow}}
$result=preg_replace("#\{\{(?!links)\S*?\?.*?}}#s","",$result);
澄清它變得儘快卡住:
沒有{{page? }}
子標籤(所有子標籤都是{{thisformat}}
)。換句話說就是:{{foo? {{links? bar }} baz }}
永遠不會發生。
什麼'{{頁? }}標籤?你的意思是'{{主頁? ...}}'?你真的想刪除鏈接標籤以外的所有標籤嗎? '{{foo? {{鏈接? bar}} baz}}'?或者你只是想抓住鏈接標籤的內容? – Qtax 2011-05-18 14:48:10
's /什麼/什麼將/;' – Qtax 2011-05-18 14:54:37
這可能很簡單,使用'(?R)'語法的遞歸正則表達式。在你的情況下,你可能會逃避:''#\ {\ {(?! links)\ w + \?((?R)|。)*}}#s「' - 但是'.'應該被重寫爲更具體的東西。 – mario 2011-05-18 14:56:00