preg_replace将用户输入字符串转换为链接模式



我想转换用户输入字符串

"一些…不重要的,,像这样">

"像这样不重要的东西">

所以基本上删除所有重复出现的带有"-"的特殊字符。我在谷歌上搜索了一下,找到了这个

preg_replace('/[-]+/', '-', preg_replace('/[^a-zA-Z0-9_-]/s', '-', strtolower($string)));

我很想知道这是否可以用一个preg_replace()来完成。

只是为了澄清一下:将所有特殊字符和空格替换为连字符(-)。如果连续出现更多事件,请用单连字符替换它们

我的解决方案可以完美地工作,但我希望在一次呼叫中也能做到这一点

昨天也有类似的问题,但我手头没有。

在您当前的第一个模式中:

[^a-zA-Z0-9_-]

你只想找一个角色。如果你对一个或多个进行贪婪的匹配,正则表达式引擎会自动用一个替换其中的多个:

[^a-zA-Z0-9_-]+
^- + = one or more

然后仍然存在字符串中现有的-未被捕获的问题,因此需要将它们从"not in"字符类中取出:

[^a-zA-Z0-9_]+

这样就可以做到:

preg_replace('/[^a-zA-Z0-9_]+/s', '-', strtolower($string));

由于它只是小写的,您也不需要查找A-Z,只需要另一个缩写:

preg_replace('/[^a-z0-9_]+/s', '-', strtolower($string));

也可参见+所属的重复和/或量化词(参见使用Star和Plus­正则表达式的重复。info)。

此外,如果你看一下修饰符­文档,您将看到s(PCRE_DOTALL)修饰符是不必要的:

$urlSlug = preg_replace('/[^a-z0-9_]+/', '-', strtolower($string));

希望这能对您有所帮助,并向您解释一下您正在使用的正则表达式,以及您可以在哪里找到更有用的文档。

试试这个:

preg_replace('/[^a-zA-Z0-9_-]+/s', '-', strtolower($string));

最新更新