我的 PHP 代码中有以下正则表达式:
// markers for italic set *Text*
if (substr_count($line, '*')>=2)
{
$line = preg_replace('#\*{1}(.*?)\*{1}#', '<i>$1</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 然后使用正则表达式迭代结果?!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
使用匹配你不想要的内容并丢弃技术,您可以在 PHP (PCRE) 中使用此正则表达式:
并替换为
$1正则表达式演示
PHP 代码:
$r = preg_replace('/\*[^*]*\*(*SKIP)(*F)|\*([^*]*)\*/'), "$1", $input);
说明:
\*:匹配*[^*]*:匹配 0 个或多个非*字符
:匹配\*:匹配结束*(*SKIP)(*F):要丢弃并跳过此匹配的 PCRE 动词\*([^*]*)\*:匹配*s 括起来的字符串