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