【问题标题】:Regex match for anything EXCEPT pattern正则表达式匹配除模式之外的任何内容
【发布时间】:2013-03-13 05:03:49
【问题描述】:

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

【问题讨论】:

    标签: java regex regex-negation


    【解决方案1】:

    您可能只想使用这个:

    \W+
    

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

    [a-zA-Z0-9_]
    

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

    [\W_]+
    

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

    [^A-Za-z0-9]+
    

    意思是“除了字母和数字之外的一切”。

    希望这会有所帮助。

    【讨论】:

    • @Sean Johnson 我不想匹配像“02323”这样的字符串,这就是为什么我有 0|[1-9][0-9]* 我也不想匹配字符串像“2”。或者 ”。”。但“2.3”将被接受。
    • @user2163834:所以基本上只是浮点数,还是还有更多?
    • 我不想要任何浮点数或字母串。我想退货。
    • @user2163834 “我想匹配除字母或数字以外的任何内容”不同意“但将接受 2.3”。请尝试澄清您要捕获的内容;几个示例字符串会有所帮助
    • @lxop,是的,我的意思是我知道 (0|[1-9][0-9]*)(\\.[0-9]+)?|[a -zA-Z]+ 接受与我想要的相反,但 [a-zA-Z0-9_] 也接受 0132321 和 2.3
    【解决方案2】:

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

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

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

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

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

    希望这能回答你的问题。

    【讨论】:

    • @Ankur,我正在寻找否定格式,因为接下来的几个部分也是这样......
    • 你能用一个示例解释一下吗,它将帮助我准确理解你需要什么。
    【解决方案3】:

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

    [^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());
    
      }
    

    【讨论】:

    • 我想找到字符串中 NOT 数字(即 12、12.22)或字母字符串(AbacD、Idontknowthis)的部分。
    • 问题的第二部分是找到字符串中不是字母字符串的部分,如上所述,或“@”或“.com”
    • 好的,我只是在编辑我的答案并添加一些内容,希望它能帮助您获得解决方案。
    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2011-10-06
    • 2021-05-26
    • 2022-08-21
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多