PHP中的多个正则表达式

时间:2011-05-24 02:45:33

标签: php regex

在PHP(或一般)中处理多个正则表达式是否更好?

我有下面的代码用破折号替换非字母数字字符,一旦发生替换,我想删除多个破折号的实例。

$slug = preg_replace('/[^A-Za-z0-9]/i', '-', $slug);
$slug = preg_replace('/\-{2,}/i', '-', $slug);

有更简洁的方法吗?即,设置正则表达式模式以替换一个模式,然后另一个模式?

(当谈到正则表达式时,我就像一个插座中的叉子的孩子)

3 个答案:

答案 0 :(得分:4)

你可以通过说出你在第一个中的真正含义来消除第二个preg_replace

$slug = preg_replace('/[^a-z0-9]+/i', '-', $slug);

你真正的意思是“用一个连字符替换一个或多个非字母数字字符的所有序列”,这就是/[^a-z0-9]+/i所做的。此外,当您指定不区分大小写的正则表达式时,您不需要包括大写和小写字母,所以我把它拿出来。

答案 1 :(得分:2)

没有。你有什么是处理这个问题的适当方法。

从这个角度考虑它:正则表达式旨在找到一个模式(单个模式)并以某种方式处理它。因此,通过尝试一次处理多个模式,您只会让自己头疼。对所有参与者来说,这是最好的。

答案 2 :(得分:0)

如果$slug已经没有多个连字符,那么您可以通过使用第一个preg_replace调用来避免第二次preg_replace调用:

$slug = preg_replace('/[^a-z0-9]+-?/i', '-', $slug);

上面的代码会在连字符处找到非字母数字字符可选地跟随,并用单个连字符-替换匹配的文本。因此无需进行第二次preg_replace调用。