我正在使用此正则表达式将歌曲名称格式化为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-
并创建连字符。我该如何修改正则表达式以替换上面的内容,但用空空格替换第一个和最后一个特殊字符。
最佳答案
您需要进行两次更换。
$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);
关于php - 正则表达式用连字符替换特殊字符,但首尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28859317/