2015-02-12 22 views
1

我有一個正則表達式,只接受可打印的ASCII集,如下所示。可打印ASCII的正則表達式,但不允許所有字符都是空格的字符串

([!-~]|[ ])* 

但我想拒絕一切都像

"  " 

任何建議空字符串?

在此先感謝

+0

一個例子會更好。 – 2015-02-12 06:01:16

+2

'\\ S +'會匹配所有不是空白的東西。 – 2015-02-12 06:03:41

+0

@ Elliott Frisch,想要匹配的字符串是否包含空格,如果所有字符都是空格,只想拒絕 – Mayuran 2015-02-12 06:07:19

回答

2

好像你想是這樣的,

"^(?=[ \\t]*\\S)([!-~]|[ ])*" 

(?=[ \\t]*\\S)稱,有至少要包含一個非空格字符會提出這一特定線路上。

OR

string.matches("(?=\\s*\\S)([!-~]|[ ])*"); 

注意,\\s匹配線也打破。

DEMO

String s[] = {"foo bar", " ","bar"}; 
for(String i:s) 
{ 
    System.out.println(i.matches("(?=[ \\t]*\\S)([!-~]|[ ])*")); 
} 

輸出:

true 
false 
true 
+0

謝謝Avinash Raj。正常工作 – Mayuran 2015-02-12 06:09:57

+0

由於我必須在XSD中使用正則表達式,所以前瞻性不受XSD支持。我用以下正則表達式來創建。 ([] *([! - 〜])[] *)+這似乎是工作 – Mayuran 2015-02-12 11:30:36

1

如果空字符串""也不應該通過您正則表達式的測試,然後只需String#Trim()你在比賽之前輸入。將您的正則表達量詞從*更改爲+,即至少需要一個字符。

([!-~]|[ ])+ 

然後空字符串或只有空格的字符串將無法匹配您的正則表達式。

+0

它匹配的行也有一個空格... – 2015-02-12 06:07:51

+1

該行將被修剪爲'「」',並且無法匹配正則表達式。 – 2015-02-12 06:09:13

+0

感謝您的建議,但我在XSD中使用此正則表達式。所以我認爲任何字符串處理都是不可能的 – Mayuran 2015-02-12 06:11:48

0

,因爲我已經使用在XSD正則表達式,下面的正則表達式不能使用

^(?=[ \\t]*\\S)([!-~]|[ ])* 

不過我用下面的表達式,這似乎是爲我工作。一個簡單的表達沒有任何展望

([ ]*([!-~])[ ]*)+ 
相關問題