我正在使用 WYSIWYG 编辑器从它创建的地方获取文本,因此它充满了html标记。 (b
,p
,strong
等等。)
我需要做的是,在剥离标记之前确保每一行/ parapgraph都以句号结束。如果有一个完整的停止不做任何事情,但如果在< / p>之前的字符不是一个句号,加一个。
我试过了:
$str = ereg_replace("[A-Za-z0-9]</p>", ".</p>", $str );
但这也消除了句子中的最后一个字母(据我理解应该这样)。因此the end</p>
变为the en.</p>
。有什么好办法可以做我想做的事吗?
答案 0 :(得分:4)
这似乎有效,使用2个正则表达式反向引用$ 1和$ 2。
括号中定义 $ 1 的第一个正则表达式是:不是句点,不是空格[SP,Tab,...],后跟任意数量的空格或没有空格。简单来说,整个正则表达式指出:“&lt;”之前的最后一个 SOLID - VISIBLE 字符不是句号“。”。
$ 2 是一个HTML标记,例如b,p,li,strong,h1,...
$str = "<p>This is a good text, but it's
very tedious </p>";
preg_replace("/([^\.\s])[\s]*<\/([[:alnum:]]+)>/", "$1.</$2>", $str);
echo $str;
给出: 这是一篇很好的文章,但这很乏味。
$str = "<p>This is a good text, but it's
very tedious. </p>";
preg_replace("/([^\.\s])[\s]*<\/([[:alnum:]]+)>/", "$1.</$2>", $str);
echo $str;
给出: 这是一篇很好的文章,但这很乏味。
$str = preg_replace("/([a-z0-9])<\/p>/i", "$1.</p>", $str);
为任何以数字或ASCII字母结尾但没有句号的段落添加句号。 HTML标记(例如P或p)在这里不区分大小写。
答案 1 :(得分:0)
使用负面的lookbehind作品:
$str = preg_replace("/(?<!\.)<\/p>/", "$1.<\/p>", $str);