正则表达式帮助:不包含字符a-z或0-9

14

我需要一个正则表达式,用于查找所有不是a-z或0-9的字符。

我不知道在正则表达式中NOT运算符的语法。

我希望正则表达式为NOT [a-z, A-Z, 0-9]。

提前感谢!

5个回答

19

这里的“^”表示非字母或数字的字符,你的正则表达式应该使用[^a-zA-Z0-9]。需要注意的是:这个字符类在处理非ascii环境时可能会有意外的行为。例如,它会匹配到é。

修改

如果这些正则表达式是perl-compatible(PCRE),你可以使用\s来匹配所有空白字符,包括空格和其他空白字符。如果它们是posix-compatible,则使用[:space:]字符类(如:[^a-zA-Z0-9[:space:]])。我建议使用[:alnum:]而不是a-zA-Z0-9

如果你想匹配一行的结尾,应该在末尾加上$。只有当你的匹配跨越多行时才打开多行模式,对于更大的文件,多行模式会降低性能,因为要读入更多的内容到内存中。

为什么不把样本输入、你要匹配的文本和使用的程序都包含进来呢?


我添加了一些[^a-zA-Z0-9\t],并添加了\t以忽略空格。但是它也会捕获行末的换行符。我所读到的资料说我需要打开多行模式,而且我认为我还需要使用$,但我不太确定。 - s15199d
[^a-zA-Z0-9\s] \s 处理了行尾和空格。 - s15199d

14
很简单,你只需要在字符集的开头添加^即可反转该字符集。
例如,以下模式将匹配除小写 ASCII 字符或数字以外的所有内容:
[^a-z0-9]
作为一则附言,我发现一些更有用的正则表达式资源是这个网站这个作弊表(特定于C#)

3

在字符类表达式的开头加上^[^a-z0-9]


2
你也可以使用 \W,它是非单词字符的速记符号(等同于 [^a-zA-Z0-9_])。

1
At start [^a-zA-Z0-9]

for condition;
pre_match();
pre_replace();
ergi();

试试这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接