2016-11-29 67 views
0

我有下面的深层链接,如果字符串有2个或更多的问号正则表达式应该失败,最好应包含总是一个问号正则表达式 - 链接不允许双问号的Java

这里是正则表达式我使用:"^(?!.*[?][?].*)+$"

TestMe?src=SRCH&reset=true - regex should pass 
TestMe?src=SRCH?reset=true - regex should fail 
+1

你的正则表达式'^ + $'只匹配空的字符串并失败所有其他字符串。你需要'.matches(“(?s)^(?!(?:[^?] * [?]){2})。*”)'或者使用下面的解决方案。 –

+1

你决定用正则表达式来解决这个问题。现在你有两个问题。 –

+0

上面的正则表达式工作原理 – user1970783

回答

2

您正在寻找2个相邻S:

"^(?!.[?][?].)+$" 
    ^^ 

你的 “失败” 字符串没有说​​:

TestMe?src=SRCH?reset=true 
     ^--------^ 

你并不需要使用正则表达式来检查两个问号:(?!。[?] [?] *。*)

boolean containsTwoQuestionMarks(String str) { 
    return str.indexOf('?') != str.lastIndexOf('?'); 
} 
+0

我不是在寻找相邻的?,总体上2个或更多?应该失败。需要正则表达式,因为我想附加到现有的正则表达式 – user1970783

+0

稍微高效:'int first = str.indexOf('?');首先返回> = 0 && index shmosel