1

我很难找到解决方案。如何避免丢失此正则表达式中的句点?

$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
4

4 回答 4

4
$text = preg_replace('@[^0-9a-z\.]+@i', '-', $text);

这会以不区分大小写的方式替换任何不是 0-9、az 或句点的内容。

于 2013-05-23T14:14:46.190 回答
1

只需将点添加到您的角色类:

$text = preg_replace('~[^\\pL\d.]+~u', '-', $text);

您正在使用否定字符类([^部分),因此与该字符类中的任何字符不匹配的任何内容都会被替换。

顺便说一句,您的问题标题与您的正则表达式不匹配。

于 2013-05-23T14:20:47.110 回答
0

不要进行双重转义并完全兼容 unicode,数字是:\pN然后:

$text = preg_replace('~[^\pL\pN]+~u', '-', $text);
于 2013-05-23T14:37:04.417 回答
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

于 2013-05-23T14:22:19.787 回答