2016-03-18 472 views
0

我需要防止字段具有双下划线或空格。我希望在字段中没有匹配时发生错误,而不是尝试匹配以检查错误。我几乎有这个模式,但是当字符串以双下划线开始时,我似乎无法阻止匹配。以下是我有:正则表达式排除字符

(^(:^ \ S)(:((?:?。?!?__ | \ S)))* $)

+0

@Jan下划线是允许的,只有双下划线是无效的。 –

+0

@DarthAndroid:对,你误解了。 – Jan

+0

尝试['String pattern =“^(?:(?!(?:__ | \\ s))。)* $”'](https://regex101.com/r/cV3cD1/1) –

回答

0

尝试:

^([^_\s]|(_(?!_)))*$ 

这应该匹配由不是_或空白的字符组成的任何字符串,以及任何不是_后面跟有的字符。

0

什么 “(\\ \\小号S | __)” 寻找只为双空格或双下划线:

Pattern reg = Pattern.compile("(\\s\\s|__)"); 

//If the pattern is not found the String is valid 
System.out.println(! reg.matcher(" v a l i d e").find()); 
System.out.println(! reg.matcher("__invalide").find()); 
System.out.println(! reg.matcher("_valide_").find()); 
System.out.println(! reg.matcher("InVALIDE ").find()); 
System.out.println(! reg.matcher("in__va lid").find()); 
+0

I only需要知道是否有两个空格,不需要匹配更多,这种情况下效率不高。 –

0

你能想出某事。如:

^(?:(?!__|\s{2,}).)+$ 

这将防止两个下划线或两个空格直接跟随。见a demo on regex101.com