我使用这个正则表达式将歌曲名称格式化为 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/