我的 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粉3962485782024-03-30 20:42:40
使用來搭配你不想要的內容並丟棄技術,你可以在 PHP (PCRE) 中使用此正規表示式:
\*[^*]*
\*(*SKIP)(*F)|\*([^*]*)\*
並替換為$1
#PHP 程式碼:
#$r = preg_replace('/\*[^*]*
\*(*SKIP)(*F)|\*([^*]*)\*/'), "", $input);
說明:
\*
:符合*
#[^*]*
:符合 0 個或多個非 *
字元
:符合
\*
:匹配結束 *
#(*SKIP)(*F)
:要丟棄並跳過此符合的 PCRE 動詞\*([^*]*)\*
:符合 *
s 括起來的字串