【发布时间】:2015-02-10 18:04:58
【问题描述】:
直截了当的问题;如何将以下两种 preg_replace 模式合二为一?
preg_replace( '/(?<!\d)[.,!?](?![.,!?\d])/', '$0 ', $filecontent);
preg_replace('/\s\s+/', ' ', $filecontent);
第一个来自this answer,而第二个只是删除了过度使用的空格。
我尝试做一些类似链的事情(请参阅下面注释掉的行),但这没有奏效——而且我猜它也不是最好的解决方案。
$fp2 = fopen($filepath, 'r+');
$filecontent = file_get_contents($filepath);
$correctedpunctation = preg_replace( '/(?<!\d)[.,!?](?![.,!?\d])/', '$0 ', $filecontent);
/* $correctedspacing = preg_replace('/\s\s+/', ' ', $correctedpunctation); */
/* fwrite($fp2, $correctedpunctation); */
fwrite($fp2, $correctedpunctation);
fclose($fp2);
我一直在尝试阅读 regular expressions,但我不熟悉使用这种字符替换,并且发现这些模式很难阅读和理解。如果不破坏此 preg_replace 的部分或全部预期功能,我似乎无法将它们添加在一起。任何解释和/或示例将不胜感激。
【问题讨论】:
-
如果他们都做完全独立的事情,那么将它们分开应该没有问题。只是想知道为什么要合并它们。此外,您可能会在前瞻中添加
\s,以防止在标点符号后跟空格的情况下添加空格。比如:...(?![.,!?\d\s])
标签: php regex string formatting preg-replace