PHP regex删除除句号以外的非字母数字


PHP regex remove non alphanumeric except period

我很难找到解决这个问题的方法。如何避免在正则表达式中丢失周期?

$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);