正如标题所说:我希望输入是一个或多个不在字母、数字和空格组合中的符号。所以基本上任何一个~!@#, etc
。我有
"^(?=.*[[^0-9][^\w]])(?=\\S+$)$"
我知道我可以否定适当的集合,但我不知道如何创建我的超级集合开始。以下会做吗?
"^(?=.*[(_A-Za-z0-9-\\+)])(?=\\S+$)$"
也许您正在寻找\p{Punct}
与 中的任何一个匹配的!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
。
String re = "\\p{Punct}+";
班上:
[^\w\s]
这将匹配任何非字母数字/非空白字符。
爪哇String
:
String regex = "[^\\w\\s]";
要匹配一个或多个非字母、非数字或非空格的字符串,您可以使用正则表达式:
^(?:[^\w\s]|_)+$
您必须_
单独包含 ,因为字符类 \w 包含_
. 并且\w
字符类相当于[a-zA-Z_0-9]
参考链接
我只会使用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();
}