Regex 从字符串中删除非数字和非LPHA字符?

Regex 从字符串中删除非数字和非LPHA字符?,regex,string,replace,Regex,String,Replace,从字符串中删除所有特殊字符的最佳方法是什么-如下所示: !@$%^&*(){}|:“?>我们是“tr”命令吗 你不会说你在什么环境下……shell?C程序?Java?每种环境都会有不同的最佳解决方案。一般来说,拥有白名单比黑名单要好 Regex有一个方便的\w,它实际上意味着字母数字加下划线(一些变体还将重音字符(á、é、ô等)添加到列表中,其他变体则没有) 您可以使用\W来表示所有非字母数字的内容 因此,用空字符串替换\W将删除所有“特殊”字符。 或者,如果您确实需要一组不同的字符来表示字母

从字符串中删除所有特殊字符的最佳方法是什么-如下所示:

!@$%^&*(){}|:“?>我们是“tr”命令吗


你不会说你在什么环境下……shell?C程序?Java?每种环境都会有不同的最佳解决方案。

一般来说,拥有白名单比黑名单要好

Regex有一个方便的
\w
,它实际上意味着字母数字加下划线(一些变体还将重音字符(á、é、ô等)添加到列表中,其他变体则没有)

您可以使用
\W
来表示所有非字母数字的内容

因此,用空字符串替换
\W
将删除所有“特殊”字符。


或者,如果您确实需要一组不同的字符来表示字母数字,则可以使用否定字符类:
[^abc]
将匹配所有不在
a
b
c
范围内的字符,
[^a-z]
将匹配所有不在
a、b、c、d…x、y、z


等价于
\w
的是
[A-Za-z0-9\]
,因此
\w
[^A-Za-z0-9\]

,你要用什么语言编写正则表达式

例如,在Perl中,您可以执行一个转换,将列表中的任何字符转换为零:

e、 g.这将把“a”、“b”、“c”或“d”翻译成“a”


我更喜欢正则表达式,因为语法更易于阅读和维护:

# in Python
import re
re.sub("[abcdef]", "", text)
其中
abcdef
是要删除的正确转义字符

或者,如果只需要字母数字字符(加下划线),可以使用:

re.sub("\W", "", text)

其中
\W
表示非单词字符,即
[^a-zA-Z_0-9]

当您只需要字母数字字符时,可以使用倒排字符类来表示:

[^A-Za-z0-9]+
这意味着:不是字母数字的每个字符。

在php中:

$tests = array(
     'hello, world!'
    ,'this is a test'
    ,'and so is this'
    ,'another test with /slashes/ & (parenthesis)'
    ,'l3375p34k stinks'
);

function strip_non_alphanumerics( $subject )
{
    return preg_replace( '/[^a-z0-9]/i', '', $subject );
}

foreach( $tests as $test )
{
    printf( "%s\n", strip_non_alphanumerics( $test ) );
}
产出将是:

helloworld
thisisatest
andsoisthis
anothertestwithslashesparenthesis
l3375p34kstinks
这里有一个简单的正则表达式

[^\w]
这将捕获所有非单词字符这将允许a-z a-z 0-9空格和uu既无空格也无uu在您的列表中,因此如果您还想捕获这些字符,那么我将执行以下操作:

/[a-z0-90/i

这是a-z和0-9的PHP格式,i使其不区分大小写。

您可以通过获取键入字符的askey值在前端验证它们。

PHP中的理想方法是

$text = "ABCDEF...Á123";
$text = preg_replace( '/[^\p{L}]/i', '', $text);
print($text); # Output: ABCDEFÁ
或者,在Perl中

my $text = "ABCDEF...Á123";
$text =~ s/[^\p{L}]//gi;
print($text); # Output: ABCDEFÁ

如果您只是在[^a-zA-Z]上进行匹配,您将错过所有重音字符,我想这(在大多数情况下)是您想要保留的。

\w代表[a-zA-z0-9],我不确定他是否也想要低端。这是错误的。\w不包括空格。用“[^\w]”代替“\w”也太复杂了“。您的第二个表达式将不起作用-它的右括号中有一个零。这也不是特定于PHP的格式,它适用于许多不同的表单。我可能会添加一些大写字母的测试用例。@jm:这也是一件好事,我只是懒得键入任何内容,正则表达式后面的“I”使正则表达式不区分大小写;)另外,如果现在的问题将环境定义为.NET,为什么这是公认的答案?(我想我回答的时候没有)。例如,在C#中,它在概念上不会有太大的不同,但看起来不会像这样。
my $text = "ABCDEF...Á123";
$text =~ s/[^\p{L}]//gi;
print($text); # Output: ABCDEFÁ