首頁  >  問答  >  主體

將 *italic* 等字串轉換為 <i>italic</i>,但如果換行符號位於星號限制範圍內,則不進行轉換

我的 PHP 程式碼中有以下正規表示式:

// markers for italic set *Text*
if (substr_count($line, '*')>=2)
{
    $line = preg_replace('#\*{1}(.*?)\*{1}#', '<i></i>', $line);
}

效果很好。

但是,當 $line 持有 <br> 時,例如

*This is my text<br>* Some other text

然後正規表示式仍然考慮文字並將其轉換為:

<i>This is my text<br></i> Some other text

目標是如果遇到 <br> 則不翻譯文字。如何使用正規表示式來做到這一點 - 使用所謂的「負向前瞻」或如何更改現有的正規表示式?

注意:類似 *This is my text*<br>Some other text<br> 和再次 *italic*<br>END 的字串仍應考慮和轉換。

想法:或者我應該分解 $line 然後使用正規表示式迭代結果? !

P粉262073176P粉262073176177 天前330

全部回覆(1)我來回復

  • P粉396248578

    P粉3962485782024-03-30 20:42:40

    使用來搭配你不想要的內容並丟棄技術,你可以在 PHP (PCRE) 中使用此正規表示式:

    \*[^*]*
    \*(*SKIP)(*F)|\*([^*]*)\*

    並替換為$1

    #正規表示式示範

    #PHP 程式碼:

    #
    $r = preg_replace('/\*[^*]*
    \*(*SKIP)(*F)|\*([^*]*)\*/'), "", $input);

    說明:

    • \*:符合*
    • #[^*]*:符合 0 個或多個非 * 字元

    • :符合
    • \*:匹配結束 *
    • #(*SKIP)(*F):要丟棄並跳過此符合的 PCRE 動詞
    • <代码>|:或
    • \*([^*]*)\*:符合 *s 括起來的字串

    回覆
    0
  • 取消回覆