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