我有一个正则表达式,只接受可打印的ASCII设置如下。
([!-~]|[ ])*
但是我想拒绝像
这样的空间的字符串" "
有什么建议吗?
提前致谢
答案 0 :(得分:2)
好像你想要这样的东西,
"^(?=[ \\t]*\\S)([!-~]|[ ])*"
(?=[ \\t]*\\S)
断言在该特定行上必须至少存在一个非空格字符。
或强>
string.matches("(?=\\s*\\S)([!-~]|[ ])*");
请注意,\\s
也会与换行符匹配。
String s[] = {"foo bar", " ","bar"};
for(String i:s)
{
System.out.println(i.matches("(?=[ \\t]*\\S)([!-~]|[ ])*"));
}
输出:
true
false
true
答案 1 :(得分:1)
如果空字符串""
也未通过正则表达式测试,则只需在匹配前String#Trim()
输入*
。将正则表达量词从+
更改为([!-~]|[ ])+
,即至少需要一个字符。
{{1}}
然后空字符串或仅包含空格的字符串将无法与正则表达式匹配。
答案 2 :(得分:0)
由于我必须在XSD中使用正则表达式,因此不能使用以下正则表达式
^(?=[ \\t]*\\S)([!-~]|[ ])*
但我使用了以下表达式,这似乎对我有用。一个没有任何前瞻的简单表达
([ ]*([!-~])[ ]*)+