在段落的末尾添加句号

时间:2013-10-16 19:44:10

标签: php

我正在使用 WYSIWYG 编辑器从它创建的地方获取文本,因此它充满了html标记。 (bpstrong等等。)

我需要做的是,在剥离标记之前确保每一行/ parapgraph都以句号结束。如果有一个完整的停止不做任何事情,但如果在< / p>之前的字符不是一个句号,加一个。

我试过了:

$str = ereg_replace("[A-Za-z0-9]</p>", ".</p>", $str );

但这也消除了句子中的最后一个字母(据我理解应该这样)。因此the end</p>变为the en.</p>。有什么好办法可以做我想做的事吗?

2 个答案:

答案 0 :(得分:4)

这似乎有效,使用2个正则表达式反向引用$ 1和$ 2。

括号中定义 $ 1 的第一个正则表达式是:不是句点,不是空格[SP,Tab,...],后跟任意数量的空格或没有空格。简单来说,整个正则表达式指出:“<”之前的最后一个 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("/(?<!\.)&lt;\/p>/", "$1.&lt;\/p>", $str);