我想檢查一個網頁的谷歌分析腳本標記的存在。這似乎應該很容易,但我的正則表達式技能似乎缺乏。所以作爲一個簡單的例子,我試圖匹配它們之間具有「谷歌分析」的開放和關閉腳本標籤。PHP的正則表達式匹配標記先行問題
因此,例如,如果您有:
<script scr="whatever"></script>
<script>other script</script>
blah blah blah
<script>
blah blah google-analytics
<script>
然後在正則表達式:
/<script>([s/S/]*?google-analtics[s/S/]*?)<\/script>/
這將返回從第一個腳本標記一個字符串,幷包括其他的腳本標記。因此,像:
other script</script> blah blah blah <script> blah blah google-analytics
但是,當然,我只希望字符串
blah blah google-analytics
所以接下來的一步,包括提前負的樣子:
/<script>((?![s/S/]*?script)[s/S/]*?google-analytics[s/S/]*?)<\/script>/
但是,沒有按」 t似乎工作。我嘗試了一組不同的捕捉組合和'[s/S /] *?'在前面和後面。
基本上我試圖匹配一個字符串,只要它不包含子字符串。這聽起來像是一個常見的問題,但對於我來說,我無法去工作。我有谷歌一噸,所有的例子都很簡單,但似乎沒有工作。我一直在使用https://regex101.com/r/hN5dK5/2
任何洞察將有所幫助。 (腳本以php身份運行)
確實在搜索DOM標籤時,使用DOM解析器通常是更好的路徑。儘管所有PHP Dom解析器都有副作用。例如,如果您想添加腳本標記(如果缺少腳本標記),那麼我發現的所有DOM解析器都會更改其餘的html。這只是一個問題,如果你希望你的html格式化爲人類的可讀性。 –