4

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

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

我知道我可以否定适当的集合,但我不知道如何创建我的超级集合开始。以下会做吗?

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

4 回答 4

4

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

String re = "\\p{Punct}+";
于 2013-07-10T01:57:59.767 回答
3

班上:

[^\w\s]

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

爪哇String

String regex = "[^\\w\\s]";
于 2013-07-10T01:45:18.917 回答
1

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

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

在此处输入图像描述

您必须_单独包含 ,因为字符类 \w 包含_. 并且\w字符类相当于[a-zA-Z_0-9] 参考链接

于 2013-07-10T02:55:58.883 回答
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();
}
于 2013-07-10T02:12:08.393 回答