將 *italic* 等字串轉換為 <i>italic</i>,但如果換行符號位於星號限制範圍內,則不進行轉換
P粉262073176
P粉262073176 2024-03-29 21:43:59
0
1
392

我的 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粉262073176
P粉262073176

全部回覆(1)
P粉396248578

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

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

並替換為$1

#正規表示式示範

#PHP 程式碼:

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

說明:

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

  • :符合
  • \*:匹配結束 *
  • #(*SKIP)(*F):要丟棄並跳過此符合的 PCRE 動詞
  • |代码>:或
  • \*([^*]*)\*:符合 *s 括起來的字串
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板