簡體   English   中英

PHP/Perl 正則表達式求助!

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

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