regex Java未知字符作为[azAz09]*?
我不是正则表达式方面的专家,但我需要解析一些我无法控制的输入,并确保过滤掉任何没有A-z和/或0-9的字符串
当我运行这个时
Pattern p = Pattern.compile("^[a-zA-Z0-9]*$"); //fixed typo
if(!p.matcher(gottenData).matches())
System.out.println(someData); //someData contains gottenData
某些空格+未知符号以某种方式通过过滤器(gottenData是红色矩形):
如果你想知道,它也会显示文本,但不完全是这样
现在,我不介意[?]只要它还包含一些字符串
请帮忙
[EDIT]据我所知,从(非常大的)输入来看,[?]s要么是空白要么什么都没有;可能存在某种编码问题,也可能与#文本节点有关(输入是xml)
# 1 楼答案
正确答案是上述答案的组合。首先,我想你想要的角色匹配是[a-zA-Z0-9]。请注意,A-z并不像您想象的那么糟糕,它包含了A到z之间ASCII范围内的所有字符,即字母加上一些额外的字符(特别是[,\,],^,,`)
Martin提到的第二个潜在问题是,如果希望字符串仅由字母和数字组成,则可能需要输入开头和结尾限定符
最后使用*运算符,它表示0或更多,因此可以匹配0个字符,匹配结果将返回true,因此您的模式将有效地匹配任何输入。你需要的是+量词。因此,我将提交您最可能寻找的模式:
^[a-zA-Z0-9]+$
# 2 楼答案
必须将regexp更改为
"^[a-zA-Z0-9]*$"
,以确保匹配整个字符串# 3 楼答案
看起来应该是“a-zA-Z0-9”,而不是“a-zA-Z0-9”,试着纠正一下
# 4 楼答案
*量词匹配“零或更多”,这意味着它将匹配不包含类中任何字符的字符串。试试+量词,这意味着“一个或多个”:
^[a-zA-Z0-9]+$
将只匹配由字母数字字符组成的字符串^.*[a-zA-Z0-9]+.*$
将匹配包含一个或多个字母数字字符的任何字符串,尽管前导为。*会让它慢得多。如果使用Matcher.lookingAt()
而不是Matcher.matches
,则不需要完整的字符串匹配,可以使用regex[a-zA-Z0-9]+
# 5 楼答案
你可以在http://www.regexplanet.com/simple/快速测试你的正则表达式