2017-03-09 101 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