PHP正则表达式除了句点之外删除非字母数字

时间:2013-05-23 14:13:04

标签: php regex

我无法找到解决方案。如何避免在此正则表达式中丢失期限?

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

4 个答案:

答案 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);