Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中编写正则表达式来删除特殊字符?_Php_Regex - Fatal编程技术网

如何在PHP中编写正则表达式来删除特殊字符?

如何在PHP中编写正则表达式来删除特殊字符?,php,regex,Php,Regex,我对PHP非常陌生,我注意到有许多不同的处理正则表达式的方法 这是我目前正在使用的: $replace = array(" ",".",",","'","@"); $newString = str_replace($replace,"_",$join); $join = "the original string i'm parsing through"; 我想删除所有不是a-z、a-z或0-9的内容。我在寻找上面的一个反向函数。编写它的伪代码方法是 如果$join中的字符不等于a-z、a-z

我对PHP非常陌生,我注意到有许多不同的处理正则表达式的方法

这是我目前正在使用的:

$replace = array(" ",".",",","'","@");
$newString = str_replace($replace,"_",$join);

$join = "the original string i'm parsing through";
我想删除所有不是a-z、a-z或0-9的内容。我在寻找上面的一个反向函数。编写它的伪代码方法是

如果$join中的字符不等于a-z、a-z、0-9 然后将
$join
中的字符更改为
“\uu”


非a-z,a-z,0-9的正则表达式为:

preg_replace('/[^a-zA-Z0-9]/', "_", $join);
这被称为


这应该可以达到目的。

最简单的方法是:

preg_replace('/\W/', '_', $join);
\W是非单词字符组。单词字符是A-z、A-z、0-9和z\W匹配前面未提及的所有内容*

编辑:preg使用文档中记录的Perl正则表达式


*编辑2:假设使用C或英语语言环境之一。其他地区可能在word字符类中有重音字母。Unicode区域将只考虑低于代码点128的字符为字符。这是区分大小写的吗,除了大写字母外?谢谢你,本。这就是结尾的“i”的含义——不区分大小写。请注意,这个正则表达式将用单个字符替换连续出现的非字母数字字符。因此“@@@@”将替换为“not”。如果你不想这种行为,请删除+符号。幸好你指出,我通常使用相同的方法丢弃字符。这是一个老习惯。编辑,因为它没有复制OP声明的行为。谢谢mark,添加字符实际上对我试图实现的目标非常有用:)由于本地化,它可能包含除a-z以外的其他字符。事实上,这是一个很好的观点。我不确定PCRE或PHP是如何处理这个问题的。我将查看是否可以找到有关它的文档。我发现:向下滚动到\W。这非常完美-尤其是对于&;键入字符-不确定是否返回等
preg_replace('/\W/', '_', $join);