如何解决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调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。