我很难找到解决方案。如何避免丢失此正则表达式中的句点?
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
$text = preg_replace('@[^0-9a-z\.]+@i', '-', $text);
这会以不区分大小写的方式替换任何不是 0-9、az 或句点的内容。
只需将点添加到您的角色类:
$text = preg_replace('~[^\\pL\d.]+~u', '-', $text);
您正在使用否定字符类([^
部分),因此与该字符类中的任何字符不匹配的任何内容都会被替换。
顺便说一句,您的问题标题与您的正则表达式不匹配。
不要进行双重转义并完全兼容 unicode,数字是:\pN
然后:
$text = preg_replace('~[^\pL\pN]+~u', '-', $text);
“\\pL”到底是什么?AFAIK 这匹配反斜杠和字母 p 和 L。
你是这个意思吗?
<?php
echo preg_replace('/[^a-z0-9.]+/ui', '-', 'abc093.-23.-2ªıØẞÆ.23.OAIFJ→øæł¶iwoeweo');
?>
结果:abc093.-23.-2-.23.OAIFJ-iwoeweo