有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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是红色矩形): screenshot

如果你想知道,它也会显示文本,但不完全是这样

现在,我不介意[?]只要它还包含一些字符串

请帮忙

[EDIT]据我所知,从(非常大的)输入来看,[?]s要么是空白要么什么都没有;可能存在某种编码问题,也可能与#文本节点有关(输入是xml)


共 (5) 个答案

  1. # 1 楼答案

    正确答案是上述答案的组合。首先,我想你想要的角色匹配是[a-zA-Z0-9]。请注意,A-z并不像您想象的那么糟糕,它包含了A到z之间ASCII范围内的所有字符,即字母加上一些额外的字符(特别是[,\,],^,,`)

    Martin提到的第二个潜在问题是,如果希望字符串仅由字母和数字组成,则可能需要输入开头和结尾限定符

    最后使用*运算符,它表示0或更多,因此可以匹配0个字符,匹配结果将返回true,因此您的模式将有效地匹配任何输入。你需要的是+量词。因此,我将提交您最可能寻找的模式:

    ^[a-zA-Z0-9]+$

  2. # 2 楼答案

    必须将regexp更改为"^[a-zA-Z0-9]*$",以确保匹配整个字符串

  3. # 3 楼答案

    看起来应该是“a-zA-Z0-9”,而不是“a-zA-Z0-9”,试着纠正一下

  4. # 4 楼答案

    *量词匹配“零或更多”,这意味着它将匹配不包含类中任何字符的字符串。试试+量词,这意味着“一个或多个”:^[a-zA-Z0-9]+$将只匹配由字母数字字符组成的字符串^.*[a-zA-Z0-9]+.*$将匹配包含一个或多个字母数字字符的任何字符串,尽管前导为。*会让它慢得多。如果使用Matcher.lookingAt()而不是Matcher.matches,则不需要完整的字符串匹配,可以使用regex [a-zA-Z0-9]+

  5. # 5 楼答案

    <是否有人考虑将空间添加到正则表达式^ {< CD1>}。这应该匹配任何带有字符、数字和空格的普通文本。如果需要引号和其他特殊字符,也可以将它们添加到正则表达式中

    你可以在http://www.regexplanet.com/simple/快速测试你的正则表达式