php - 正则表达式用连字符替换除第一个和最后一个之外的特殊字符

标签 php regex

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

相关文章:

python 正则表达式匹配一个组或不匹配它

替换字符串/文本中出现的 'from nth to the last' 个单词

regex - 无法在聚合查询中使用 mongoose 中的 $regex?

php - 如何从 MYSQL 表中获取数据到 Android 应用程序

php - 随机排序的多次搜索的性能

PhpStorm - 如何在文件模板中转义美元符号(php 变量)?

jquery - 如何将变量传递到 jQuery/Javascript 中的正则表达式

php - MemCached 安全问题

php - elasticsearch匹配词组前缀和其他

regex - 正则表达式最小长度