2012-07-13 101 views
0

我有一个"abc123("的字符串,并且想检查是否包含一个或多个不是数字或字符的字符Java - 正则表达式不工作

"abc123(".matches("[^a-zA-Z0-9]+");在这种情况下应该返回true吗?但它不是!怎么了?

我的测试脚本:

public class NewClass { 
    public static void main(String[] args) { 
     if ("abc123(".matches("[^a-zA-Z0-9]+")) { 
      System.out.println("true"); 
     } 
    } 
} 
+0

第一件事第一件事:你不需要在最后的+ – 2012-07-13 13:52:01

+0

仍然不行...... – wowpatrick 2012-07-13 13:53:03

+0

在纯粹的REGEX语法上,它似乎很好(虽然我不知道Java)。在JavaScript中。肯定会返回false? – Utkanos 2012-07-13 13:54:00

回答

5

在Java中,表达式必须匹配整个字符串,而不仅仅是它的一部分。

myString.matches(“正则表达式”)返回真或假取决于是否 字符串可以由正则表达式匹配的完全。重要的是要记住,如果可以匹配整个字符串,则String.matches()仅返回true。换句话说:应用“正则表达式”就好像 你已经用字符串锚的开始和结束写了“^ regex $”。 Source

你的表情是寻找字符串的一部分,而不是整个事情。您可以将表达式更改为.*YOUR_EXPRESSION.*,并且它将展开以匹配整个字符串。

+0

我该如何解决这个问题?我想现在如果它包含它,无论其余的! – wowpatrick 2012-07-13 14:04:38

+0

@wowpatrick:您可以将'。*'添加到现有表达式的开始和结尾处。 – unholysampler 2012-07-13 14:16:12

+0

嘿,那个工作!你可以将它添加到答案吗?比不在这里:) – wowpatrick 2012-07-13 14:19:02

4

而不是检查,看它是否只包含字母和数字,为什么不检查,看它是否含有比其他的什么吗?您可以使用不是字组(\ W),如果这不是你知道字符串包含你正在寻找的文字以外的东西返回true,

"abc123(".matches("[\W]"); 

如果返回true相比,还有不只是其他的东西单词字符和数字。

2

表达式​​3210表示“不是字母或数字”。您可能想用^[A-Za-z0-9]+$替换它,意思是“只有字母或数字”。

+1

你提出的正则表达式只会匹配一个字符串。添加+:'^ [A-Za-z0-9] + $' – m0skit0 2012-07-13 13:59:44

+0

@ m0skit0:错过了,thx! – Roman 2012-07-13 19:13:33