Java 可打印ASCII的正则表达式,但不允许所有字符都是空格的字符串

Java 可打印ASCII的正则表达式,但不允许所有字符都是空格的字符串,java,regex,Java,Regex,我有一个只接受可打印ASCII集的正则表达式,如下所示 ([!-~]|[ ])* 但是我想拒绝所有内容都像空格一样的字符串 " " 有什么建议吗 提前谢谢看来你想要这样的东西 "^(?=[ \\t]*\\S)([!-~]|[ ])*" (?=[\\t]*\\S)声明该特定行上必须至少有一个非空格字符 或 string.matches("(?=\\s*\\S)([!-~]|[ ])*"); 请注意,\\s也与换行符匹配 输出: true false true 如果空字符串

我有一个只接受可打印ASCII集的正则表达式,如下所示

([!-~]|[ ])*
但是我想拒绝所有内容都像空格一样的字符串

"        "
有什么建议吗


提前谢谢

看来你想要这样的东西

"^(?=[ \\t]*\\S)([!-~]|[ ])*"
(?=[\\t]*\\S)
声明该特定行上必须至少有一个非空格字符

string.matches("(?=\\s*\\S)([!-~]|[ ])*");
请注意,
\\s
也与换行符匹配

输出:

true
false
true
如果空字符串
也不应通过正则表达式测试,则只需在匹配前输入
String#Trim()
。将正则表达式量词从
*
更改为
+
,即至少需要一个字符

([!-~]|[ ])+

那么空字符串或只带空格的字符串将无法匹配您的正则表达式。

因为我必须在XSD中使用正则表达式,所以不能使用以下正则表达式

^(?=[ \\t]*\\S)([!-~]|[ ])*
但我用了下面的表达,这似乎对我有用。没有任何前瞻性的简单表达式

([ ]*([!-~])[ ]*)+

举个例子会更好。
\\S+
将匹配所有非空格的内容。@Elliott Frisch,如果字符串包含空格,则希望匹配,如果所有字符都是空格,则只希望拒绝。该行将被修剪为
,并且无法匹配正则表达式。谢谢您的建议,但我正在XSD中使用此正则表达式。所以字符串的任何处理都是不可能的,我想感谢阿维纳什·拉杰。由于我必须在XSD中使用正则表达式,所以XSD不支持前瞻。我想出了以下正则表达式。([]*([!-~]][]*)+这似乎有效
([ ]*([!-~])[ ]*)+