合并这些类似的preg_replace正则表达式变体

时间:2014-05-07 00:15:05

标签: php regex preg-replace

我有一组三个preg_replace函数给我我想要的结果,但我不知道是否有办法让代码更有效率。有没有办法合并这些变化?

$content = "A really long string with paragraph breaks, html tags, spaces, etc."
$string = preg_replace('/\.\n[A-Z](.+)/', '.', strip_tags($content));
$string = preg_replace('/\.\r[A-Z](.+)/', '.', strip_tags($string));
$string = preg_replace('/\.\s[A-Z](.+)/', '.', strip_tags($string));

我不需要任何人为我做我的工作。我只需要指针,因为一旦我知道有哪些选项可以使用,我就可以搞清楚。一切都是为了更清晰,更有效的代码。

更新

最终代码如下所示。

$content = "A really long string with paragraph breaks, html tags, spaces, etc."
$string = strip_tags($content);
$string = trim(preg_replace('/[\t\n\r\s]+/', ' ', $string));
$string = preg_replace('/\.[\t\n\r\s][A-Z](.+)/i', '.', $string);

1 个答案:

答案 0 :(得分:1)

以下是我如何清理它:

$content = "A really long string with paragraph breaks and shift spaces, etc."
$string = preg_replace('/\.[\n\r\s][A-Z](.+)/', '.', strip_tags($content));

但我不明白的是strip_tags扮演的角色。你的代码还有更多你没有展示的吗?我喜欢简单易懂的事情。在PHP中可调试,所以这就是我考虑strip_tags

的因素
$content = "A really long string with paragraph breaks and shift spaces, etc."
$content = strip_tags($content);
$string = preg_replace('/\.[\n\r\s][A-Z](.+)/', '.', $content);

这似乎是一个微妙的差异,但通过将strip_tags放在一个单独的行上,您可以通过注释将其打开或关闭。

但是说,我看你的代码越多,我就越不明白输入应该是什么&想要什么输出。我的意思是,你的正则表达式是这样的:

/\.[\n\r\s][A-Z](.+)/

那会完全取代什么?为什么只是A-Z?为什么不A-Za-z?或者可能将i修饰符添加到正则表达式中,因此它不区分大小写:

/\.[\n\r\s][A-Z](.+)/i