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