Php 正则表达式将特殊字符替换为连字符,第一个和最后一个字符除外
我使用这个正则表达式将歌曲名格式化为url友好的别名。它用连字符替换一个或多个特殊字符和空格的连续实例Php 正则表达式将特殊字符替换为连字符,第一个和最后一个字符除外,php,regex,Php,Regex,我使用这个正则表达式将歌曲名格式化为url友好的别名。它用连字符替换一个或多个特殊字符和空格的连续实例 $alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", trim(strtolower($name))); 这很好,因此如果歌曲名是This*is*a(歌曲)名,它将创建别名This-is-a-song-name。但是,如果名称的开头或结尾有特殊字符*这是一首歌曲(名称),它将创建-This-is-a-song-name-在每一端创建连字符 如何修改正
$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", trim(strtolower($name)));
这很好,因此如果歌曲名是This*is*a(歌曲)名
,它将创建别名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);
您可以通过两个步骤执行此操作:
- 在第一步中,删除字符串开头和结尾的特殊字符
- 在第二步中,您可以像现在一样重用正则表达式李>
$alias = preg_replace("/(^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$)/", "", trim(strtolower($name));
$alias = preg_replace("/([^a-zA-Z0-9]+)/", "-", $alias);
(我没有测试过,但你可能会想到)你有没有考虑过使用第二个过滤器,如果字符串的头和尾有连字符,它会修剪它们?是的,我确实考虑过,但我想尝试一下,看看是否有可能在一个正则表达式语句中完成它