正则表达式(php) - 匹配非字母数字字符块

时间:2012-03-23 13:13:18

标签: php regex

我需要修改给定的字符串以仅包含字母数字字符,点(。)和逗号。 如果字符串包含除a-z,A-Z,0-9或点(。)以外的任何字符,则应使用逗号分隔,我使用此字符:

$string = "dycloro 987 stackOVERflow !|,!!friday";
$newstring = preg_replace('/[^a-zA-Z0-9\.]/', ',', $string);

返回

  

dycloro,987,计算器,,,,,,星期五

但我需要得到以下内容。

  

dycloro,987,计算器,星期五

(注意$ string中的“!|,!!”部分将替换为单个逗号符号)。 理想情况下,我想用一个逗号来替换一个不允许的字符块。 我想通了 $newstring = preg_replace('/,{2,}/', ',', $newstring);用一个逗号替换多个逗号。但有没有办法以更快或更好的方式做到这一点? 如何在单个正则表达式匹配中执行此操作? 它们中是否有任何处理时间或内存差异?这是正则表达式将针对几兆字节的用户输入运行,所以我也很好奇。

谢谢!

2 个答案:

答案 0 :(得分:2)

在字符类之后添加一个加号+,意思是"我刚提到的一个或多个":

$string = "dycloro 987 stackOVERflow !|,!!friday";
$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string);

请参阅http://www.php.net/manual/en/regexp.reference.repetition.php

答案 1 :(得分:2)

试试这个

$newstring = preg_replace('/[^a-zA-Z0-9\.]+/', ',', $string);