2012-06-05 83 views
4

我用正则表达式Java的检测字符串

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

检测一个字符串比字母和数字的其他一个或多个字符的特殊字符;

然后我尝试了以下内容:

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

我测试:

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

大多数时候,它的工作原理除了挡板\和尖^。

例如

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

任何我想念的东西?

+0

我得到 “abcAsd10 \\” 和 “abcAsd10 ^” 匹配,所以在这里就返回true。请注意,我使用C#,所以我认为它必须适用于Java。如果您编写一些能够证明您的问题的代码示例,它可以提供帮助。 – buckley

+0

FWIW,这两个字符串似乎都与[在Ideone上]相匹配(http://ideone.com/KmWPk)。 – eldarerathis

+0

我在java中也是如此。 – jahroy

回答

1

难道不应该是:

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

在你的问题你写A_Z(下划线)

+0

你是对的。已修正 – Eric

1

你也可以只改变:

[\w&&^_]+ 

其中:

  • \w单词字符w第i个下划线:[a-zA-Z_0-9]
  • \W非单词字符:​​

查看更多类Pattern

+1

这是正确的,但并未真正回答问题 – Argeman

+0

也许体验其他方式可能会很有趣。 –

0

尝试引用您输入到匹配。

Pattern.quote(p) 
2

下面的代码打印“发现:真正的”当我编译并运行它:

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); 
    } 
} 

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

1

当我运行这个我的机器上它打印真正的代码..

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

真正

+0

原来他有'[^ A-Za_z0-9] +' –

+0

所以我们需要标记这个问题......它只是一个bug –

+0

原始的([^ A-Za_z0-9] +)应该是真实的,保罗。 Aynone尝试'[^ A-za_z0-9] +'? – Eric

0

对不起,我不得不

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

导致返回 “假”。但是为什么它可以与其他特殊字符一起使用,除了backsplash \和caret ^?

0

简单地做:

p.matches(".*\\W.*"); //return true if contains one or more special character