将 *italic* 等字符串转换为 <i>italic</i>,但如果换行符位于星号限制范围内,则不进行转换
P粉262073176
P粉262073176 2024-03-29 21:43:59
0
1
370

我的 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 括起来的字符串
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!