preg_replace用法或替代方案

时间:2011-12-05 20:19:19

标签: php preg-replace

所以我需要在PHP中过滤/替换文本以确保破折号周围有空格。

示例:“衬衫一般”需要成为“衬衫 - 一般” 但我不想要额外的空间,所以“衬衫 - 一般”确实改为“衬衫 - 一般”(在破折号两侧各有2个空格。

短划线的每一侧总会有空格或文字。

现在我正在使用以下内容并且它可以工作,但需要永远(我使用此代码检查大约900,000个变量)。当我添加这个时,我的脚本从4分钟到52分钟。

$myText = preg_replace("/(.)(-)(.)/", "$1 - $3", $myText);

想法?

3 个答案:

答案 0 :(得分:1)

以下内容应该更快:

preg_replace("/ ?- ?/", " - ", $txt);

这是一个只有一次调用str_replace的变种:

str_replace(array(' -', '- ', ' - ', '-'), array('-', '-', '-', ' - '), $txt);

以下是两个工作的示例:http://codepad.org/zqf4LRVD

我懒得做性能比较,但我很想知道哪个更快。

答案 1 :(得分:1)

这应该更快:preg_replace( "/\\s*-\\s*/", " - ", $myText );

答案 2 :(得分:0)

我认为这和你一样快。您可以尝试双str_replace

$once = str_replace("-", " - ", $content);
$twice = str_replace("  -  ", " - ", $once);

这显然只有在您不担心以

开头的双倍空格时才有效