4

我使用正则表达式

r="[^A-Za-z0-9]+"; 

检测字符串是否包含一个或多个字符,而不是字母和数字;

然后我尝试了以下方法:

Pattern.compile(r).matcher(p).find();

我测试过:

! @ # $ % ^ & * ( ) +  =- [ ] \ ' ; , . / { } | " : < > ? ~ _ `

大多数情况下,除了后挡板 \ 和插入符号 ^ 之外,它都有效。

例如

String p = "abcAsd10^"    (return false)
String p = "abcAsd10\\"   (return false) 

有什么我想念的吗?

4

7 回答 7

2

当我编译并运行以下代码时,它会打印“Found:true”:

class T
{
    public static void main (String [] args)
    {
        String thePattern = "[^A-Za-z0-9]+"; 
        String theInput = "abskKel35^";
        boolean isFound = Pattern.compile(thePattern).matcher(theInput).find();
        System.out.println("Found: " + isFound);
    }
}

不知道为什么你会看到不同的结果......

于 2012-06-05T18:51:42.883 回答
1

You could also change only:

[\w&&^_]+

Where:

  • \w A word character with underscore: [a-zA-Z_0-9]
  • \W A non-word character: [^\w]

See more in class Pattern

于 2012-06-05T18:43:14.880 回答
1

那不应该是:

r="[^A-Za-z0-9]+"; 

在你的问题中你写 a_z (下划线)

于 2012-06-05T18:37:43.807 回答
1

当我在我的机器上运行此代码时,它会打印 true..

        String r="[^A-Za-z0-9]+"; 
        String p = "abcAsd10\\" ;
        Matcher m = Pattern.compile(r).matcher(p);
        System.out.println(m.find());

真的

于 2012-06-05T18:53:50.207 回答
0

尝试将您的输入引用到匹配器中。

Pattern.quote(p)
于 2012-06-05T18:50:07.723 回答
0

只需这样做:

p.matches(".*\\W.*"); //return true if contains one or more special character
于 2012-06-05T19:09:14.073 回答
0

对不起,我有

r="[^A-za-z0-9]+"; (with little "z", i.e. A-z). 

这会导致返回“false”。但是为什么它可以与除后挡板 \ 和插入符号 ^ 之外的其他特殊字符一起使用?

于 2012-06-05T19:04:30.863 回答