繁体   English   中英

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

[英]Regular Expressions (php)- match blocks of non alphanumerical charactors

我需要修改给定的字符串以仅包含字母数字字符,点(。)和逗号。 如果字符串包含az,AZ,0-9或点(。)以外的其他任何字符,则应将它们替换为逗号,我正在使用以下字符:

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

返回,

dycloro,987,StackOverflow上周五,,,,,,

但是我需要获取以下内容。

dycloro,987,计算器,周五

(请注意,$ string中的“!|,!!”部分将替换为单个逗号)。 理想情况下,我想用单个逗号符号代替一个禁止的字符块。 我发现$newstring = preg_replace('/,{2,}/', ',', $newstring); 用单个逗号替换多个逗号符号。 但是,有什么方法可以更快或更更好地做到这一点? 如何在单个正则表达式匹配中做到这一点? 并且它们之间有任何处理时间或内存差异吗? 这是正则表达式,将针对几兆字节的用户输入运行,因此我对此也很好奇。

谢谢!

在字符类之后,只需添加一个加号+ ,表示“我刚才提到的一个或多个”:

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

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

试试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM