0

我正在使用正则表达式将 HTML 转换为 BBCODE。但是,使用来自农民所见即所得编辑器(TinyMce)的代码,我遇到了问题。这是一个非常奇怪的案例:

有一些典型的空白段落,<p>&nbsp;</p>但我无法以任何方式匹配它们。以下正则表达式都没有工作:

str_replace("<p>&nbsp;</p>",........)
str_replace("<p> </p>".........)
preg_replace("#<p>.?</p>#"....)

这确实有效,但是如果“空格”在其他地方怎么办,我怎么能匹配它们?

preg_replace("#<p>.{1,6}</p>#"....)

&nbsp;即使它们没有被写入(在 BD 中,存储原始字符串的地方,&nbsp;没有写入,只有块),我怎样才能让它匹配所有的<p> </p>)这很奇怪......

4

2 回答 2

4

我建议您阅读Unicode Regular ExpressionsWikipedia: Unicode Whitespace character

脚本:

$string = '123<p>  &nbsp;  &nbsp;  </p>abc';
$pattern = '/<p>(&nbsp;|[\s\p{Z}\p{C}\x85\xA0\x{0085}\x{00A0}\x{FFFD}]+)*<\/p>/iu'; 
$replacement = ''; 
echo preg_replace($pattern, $replacement, $string); 

输出:

123abc

注意:要匹配任何单个 unicode 字形使用模式\P{M}\p{M}*+

于 2012-06-22T00:41:20.413 回答
2

使用此正则表达式时,我遇到了类似的问题(PHP process stop ):

([\r\n\t ]|\xC2\xA0|&nbsp;)+

匹配空格(我的目的:用 single 替换任何类型的空格' ')。我测试的字符串包含丰富的 HTML 标签。

这是我的解决方案:

$text = str_replace( array( '\xC2\xA0', '&nbsp;' ), ' ', $text ); $text = preg_replace( "/[\n\r\t ]+/", ' ', $text );

希望它可以帮助某人。

于 2017-02-03T09:23:34.003 回答