java正则表达式为“任何符号”,既不是单词,也不是数字,也不是空格

时间:2013-07-10 01:41:14

标签: java regex

正如标题所说:我希望输入是一个或多个不在字母,数字和空格的组合中的符号。基本上是~!@#, etc中的任何一个。我有

"^(?=.*[[^0-9][^\w]])(?=\\S+$)$"

我知道我可以否定适当的设置,但我不知道如何创建我的超级套装。以下是否会这样做?

"^(?=.*[(_A-Za-z0-9-\\+)])(?=\\S+$)$"

4 个答案:

答案 0 :(得分:4)

也许您正在寻找与\p{Punct}中的任何一个匹配的!"#$%&'()*+,-./:;<=>?@[]^_`{|}~

String re = "\\p{Punct}+";

答案 1 :(得分:3)

班级:

[^\w\s]

这将匹配任何非字母数字/非空白字符。

Java String

String regex = "[^\\w\\s]";

答案 2 :(得分:1)

要匹配一个或多个非字母,非数字或非空白字符串的字符串,您可以使用正则表达式:

^(?:[^\w\s]|_)+$

enter image description here

您必须单独包含_,因为字符类\ w包含_\w字符类相当于[a-zA-Z_0-9] reference link

答案 3 :(得分:0)

我只想使用Character对象来保持简单。

这样的事情:

public String getSpecialSymbols(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        Character c = s.charAt(i);
        if (!c.isDigit() && !c.isWhitespace() && !c.isLetter()) {
            sb.append(c);
        }
    }
    return sb.toString();
}

这将更加直截了当:

public String getSpecialSymbols(String s) {
    String special = "!@#$%^&*()_+-=[]{}|'\";\\:/?.>,<~`";
    for (int i = 0; i < s.length(); i++) {
        String c = s.substring(i, 1);
        if (special.contains(c)) {
            sb.append(c);
        }
    }
    return sb.toString();
}