PHP中的多个正则表达式

| 有没有更好的方法来处理在PHP(或一般而言)中运行多个正则表达式? 我有下面的代码用破折号替换非字母数字字符,一旦替换发生,我想删除多个破折号的实例。
$slug = preg_replace(\'/[^A-Za-z0-9]/i\', \'-\', $slug);
$slug = preg_replace(\'/\\-{2,}/i\', \'-\', $slug);
有没有更整洁的方式做到这一点?即,设置正则表达式模式来替换一个模式,然后替换另一个模式? (关于正则表达式,我就像一个在插座上插有叉子的孩子)     
已邀请:
您可以通过说出第一个really的真正含义来消除第二个
preg_replace
$slug = preg_replace(\'/[^a-z0-9]+/i\', \'-\', $slug);
您真正的意思是“用一个连字符替换一个或多个非字母数字字符的所有序列”,这就是
/[^a-z0-9]+/i
所做的。另外,当您指定不区分大小写的正则表达式时,不需要包含大小写字母,因此我将其删除。     
不。您拥有的是解决此问题的适当方法。 从这个角度考虑:正则表达式用于查找模式(单个模式)并以某种方式处理它。这样,通过尝试一次处理多个模式,您只会感到头疼。对于参与的每个人来说,这是最好的。     
如果
$slug
已经没有多个连字符,则可以使用第一个preg_replace调用来避免第二次preg_replace调用,如下所示:
$slug = preg_replace(\'/[^a-z0-9]+-?/i\', \'-\', $slug);
上面的代码将查找非字母数字字符(可选),后跟连字符,然后将匹配的文本替换为单个连字符
-
。因此无需进行第二次preg_replace调用。     

要回复问题请先登录注册