正则表达式匹配除了模式之外的任何东西

时间:2013-03-13 05:03:49

标签: java regex regex-negation

我在这里用Java编码。

我知道匹配任何数字或字母串的正则表达式是

"(0|[1-9][0-9]*)(\\.[0-9]+)?|[a-zA-Z]+"

但我希望匹配除字母或数字之外的任何内容,例如!, @, +, -

之类的符号

我尝试过[^.. ],但它无法正常工作。

例如,让我说我想做相反的事情,即返回包含数字或字符串或@的字符串的所有部分,我会这样做

public ArrayList<String> findMatch(String string){
    ArrayList <String> outputArr = new ArrayList<String>();
    Pattern p = Pattern.compile("(0|[1-9][0-9]*)(\\.[0-9]+)?|[a-zA-Z]+|\\@");
    // recognizes number, string, and @
    Matcher m = p.matcher(string)
    while (m.find()) {
        outputArr.add(m.group());
    }
    return outputArr;
}

让我们说我想找到与上面代码相​​反的内容,我该如何更改第3行?

3 个答案:

答案 0 :(得分:2)

你可能想要使用这个:

\W+

这将匹配任何不是“单词字符”的字符串,定义为:

[a-zA-Z0-9_]

或“所有字母,数字和下划线”。如果要包含下划线,请尝试以下操作:

[\W_]+

或者,如果你想明确说明:

[^A-Za-z0-9]+

这意味着“除了字母和数字之外的所有东西”。

希望这有帮助。

答案 1 :(得分:1)

您可以使用的最简单的正则表达式模式是:[^ \ w] + 这将匹配所有既不是数字也不是字母的特殊字符。希望这可以帮助。这是一个包含示例示例的示例Regex Tester。您可以在此测试正则表达式的正确性。希望这会对你有所帮助。

从你提供的我所了解的例子中,你想要除字母,数字和'@'之外的所有字符。

在正则表达式中,'\ w'匹配任何字母(包括下划线)和任何数字。所以你需要否定这一点,以获得其他符号字符,如'$,#'等。

下面的表达式将解决您的问题= [^ \ w @] +

'^'表示否定符号。这里'^ \ w'表示'匹配除字母或数字之外的任何内容'。我还在表达式中添加了'@'符号,因为您也需要忽略它。

希望这会回答你的问题。

答案 2 :(得分:0)

如果您能提供更多细节,您的要求是什么?你期待什么? 它将帮助我找出解决方案。 您在查询中添加的内容看起来只是想要匹配特殊字符。我对吗? 如果是这样,你可以尝试:

[^A-Za-z0-9][your quantifier here]  
quantifier can be:
? for 0 or 1 frequency
+ for >=1 frequency
* for >=0 frequency 

假设你有一个类似

的字符串
String s="shyuit6785%^7kui!@*&123f#$annds";

//And you want to find out the characters except alphabets and numerals . (I hope its your requirement)
 Pattern p = Pattern.compile("[^A-Za-z0-9@]+");
 Matcher m = p.matcher(s);
 while (m.find())
  {
   System.out.println("Found a required character " + m.group() + " at index number " +m.start());

  }