我正在使用正则表达式将HTML转换为BBCODE。但是,代码来自农民WYSIWYG编辑(TinyMce)我遇到了问题。这是一个非常奇怪的案例:
有一些典型的空白阶段图<p> </p>
,但我无法以任何方式匹配它们。下面的正则表达式中没有一个正在发挥作用:
str_replace("<p> </p>",........)
str_replace("<p> </p>".........)
preg_replace("#<p>.?</p>#"....)
这可行,但如果“空格”在其他地方,我怎么能匹配呢?:
preg_replace("#<p>.{1,6}</p>#"....)
即使没有写入
,我怎样才能使它匹配所有
(在BD中,存储原始字符串,<p> </p>
未写入,只有{{ {1}}块)这很奇怪......
答案 0 :(得分:4)
我建议您阅读 Unicode Regular Expressions 和 Wikipedia: Unicode Whitespace character 。
脚本:
$string = '123<p> </p>abc';
$pattern = '/<p>( |[\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}*+
答案 1 :(得分:1)
使用此正则表达式时,我遇到了类似的问题( PHP进程停止):
([\r\n\t ]|\xC2\xA0| )+
匹配空格(我的目的:用单' '
替换任何类型的空格)。我测试的字符串包含丰富的HTML标记。
这是我的解决方案:
$text = str_replace( array( '\xC2\xA0', ' ' ), ' ', $text );
$text = preg_replace( "/[\n\r\t ]+/", ' ', $text );
希望它有所帮助。