我正在使用此正则表达式将歌曲名称格式化为url友好别名。它用连字符替换1个或多个连续的特殊字符和空格实例。
$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", trim(strtolower($name)));
这样可以正常使用,如果歌曲名称为This is *is* a (song) NAME
,则会创建别名this-is-a-song-name
。但如果名称在开头或结尾*This is a song (name)
有特殊字符,则会在每一端创建-this-is-a-song-name-
创建连字符。
如何修改要替换的正则表达式,但要用空格替换第一个和最后一个特殊字符。
答案 0 :(得分:4)
您需要进行双重替换。
$str = '*This is a song (name)';
$s = preg_replace('~^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$~', '', $str);
echo preg_replace('~[^a-zA-Z0-9]+~', '-', $s);
答案 1 :(得分:1)
您可以分两步执行:
代码可能如下所示:
$alias = preg_replace("/(^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$)/", "", trim(strtolower($name));
$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", $alias);
(我没有测试过,但你可能会得到这个想法)