0

我在这里用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 行?

4

3 回答 3

2

您可能只想使用这个:

\W+

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

[a-zA-Z0-9_]

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

[\W_]+

或者,如果您希望明确说明:

[^A-Za-z0-9]+

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

希望这可以帮助。

于 2013-03-13T05:08:21.897 回答
1

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

从您提供的示例中,我理解的是,您想要除字母、数字和“@”之外的所有字符。

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

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

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

希望这能回答你的问题。

于 2013-03-13T05:51:36.420 回答
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());

  }
于 2013-03-13T06:17:25.257 回答