我的 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
然后使用正则表达式迭代结果?!
使用匹配你不想要的内容并丢弃技术,您可以在 PHP (PCRE) 中使用此正则表达式:
并替换为
$1
正则表达式演示
PHP 代码:
说明:
\*
:匹配*
[^*]*
:匹配 0 个或多个非*
字符
:匹配\*
:匹配结束*
(*SKIP)(*F)
:要丢弃并跳过此匹配的 PCRE 动词\*([^*]*)\*
:匹配*
s 括起来的字符串