2017-03-09 38 views
1

我一直在花費數小時尋找和嘗試。它們都不起作用。需要創建一個正則表達式模式,將允許匹配java中的任何utf8非空白字符?

'漢字'

'T \ N'

'一些字符'

但不允許

"  " 

'' 

模式我在這裏使用

Pattern.compile("[\\u0080-\\u9fff]+"); 

是做一個完整的字符串匹配,而我只想字符串的一部分匹配:(

感謝您的任何提示/線索

+1

你是否在'matches()'中使用它?使用'匹配#find()' –

+0

我實際上使用了javax.validation.constraints.Pattern中的ptn字符串。在我看來是做一個完整的字符串匹配:( – gigi2

+0

好吧,那麼,爲什麼不使用'「(?s)\\ s * \\ S。*」'?這將需要至少一個非空白字符在一個如果你不希望有任何換行符,可以省略'(?s)' –

回答

0

爲什麼不直接在這種情況下使用String.contains()

+0

我實際上使用java驗證API,javax.validation.constraints。* – gigi2

0

不是空白\S+是這樣的:(演示http://fiddle.re/nza9hn

"[^\\u0009-\\u000D\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028-\\u2029\\u202F\\u205F\\u3000]+" 
+0

它不會傳遞我的「密鑰\\漢字」輸入。這是我的模式驗證@Pattern(regexp =「[^ \\ u0009 - \\ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u2000 \ \ u200A \ u2028 - \ u2029 \ u202F \\ u205F \\ u3000] +「, message =」不能爲空「, flags = {Pattern.Flag.UNICODE_CASE}) – gigi2

+0

@ gigi2 - 使用測試儀不會出現任何問題http://fiddle.re/nza9hn Press頁面打開時的Java按鈕。但是,我相信我在上面的文本中插入了一些標記。使用鏈接獲取正則表達式。你會注意到沒有設置正則表達式標誌。 – sln

1

要與至少一個非空格字符匹配的字符串(在需要完整的字符串匹配的javax.validation.constraints.Pattern,即,在默認情況下錨定)使用

"(?s)\\s*\\S.*" 

查看demo of how this regex works

默認情況下接受圖案的方法允許在此處省略^$錨(它們存在於正則表達式演示中)。

如果您不希望輸入中出現任何換行符,請從模式中省略(?s)Pattern.DOTALL「嵌入式標誌選項」或其他來源中的內聯修飾符(選項))。

+0

非常感謝你!這就像一個魅力!但我不確定我是否明白這一點,是否包含utf-8字符?但是,它不通過'漢\ \字',我認爲應該肯定有資格:( – gigi2

+0

好吧,試着用'(?U)'修飾符,像'「(?sU)\\ s * \\ S。 *「'。或者只是'」(?s)。* \\ S。*「' –

+0

它適合您嗎?不適合我時通過''漢字'' – gigi2