[英]PHP/Perl Regular expression help!
我有一個字符串:
$string = "This is my big <span class="big-string">string</span>";
我無法弄清楚如何編寫一個正則表達式來替換“big”中的“b”而不替換“big-string”中的“b”。 我需要替換所有出現的 substring ,除非 substring 出現在 html 標簽中。
任何幫助表示贊賞!
編輯
也許更多信息會有所幫助。 我正在開發一個自動完成功能,該功能突出顯示您在當前結果集中搜索的任何內容。 目前,如果您在搜索對話框中輸入了“ aut ”,則結果如下所示:auto omotive
當我搜索“auto b”時出現問題。 首先,我將所有出現的 'auto' 替換為 ' <b>auto</b>
',然后我將所有出現的 'b' 替換為 ' <b>b</b>
'。 不幸的是,第二次掃描將“ <b>auto</b>
”更改為“ <<b>b</b>>auto</<b>b</b>>
”
請不要嘗試使用正則表達式解析 HTML 。 只需在 DOM 中加載 HTML ,遍歷文本節點並執行簡單的str_replace
。 你會在調試時間感謝我。
是否可以保證 'big' 不會緊跟在"
之前?如果是這樣,那么s/([^"])b/$1foo/
應該用foo
替換有問題的b
。
如果你堅持使用正則表達式,這個會做得相當不錯:
$re = '/# (Crudely) match a sub-string NOT in an HTML tag.
big # The sub-string to be matched.
(?= # Assert we are not inside an HTML tag.
[^<>]* # Consume all non-<> up to...
(?:<\w+ # either an HTML start tag,
| $ # or the end of string.
) # End group of valid alternatives.
) # End "not-in-html-tag" lookahead assertion.
/ix';
警告:這個正則表達式有非常實際的限制。 HTML 在標簽屬性中不得有任何尖括號。 此正則表達式還在 HTML 文件的其他部分(例如注釋、腳本和樣式表)中找到目標 substring,這可能是不可取的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.