2012-11-13 96 views
2

如何才能編寫一個匹配僅包含問號的字符串的正則表達式正則表達式匹配只有問號的字符串

「???」 > true

「????」 > true

「?」> true

「?a?」 > false

「?a」> false

在此先感謝!

編輯: 2箱子我錯過:

>真

「?」 「???」 >真

+1

不應該這個「」? >假'是真的?或者你試圖使單個'?'標記無效? –

+0

'「?」最後>錯誤看起來像一個錯誤。你有這樣的假和真。 – dan1111

+1

我注意到了,''? > true'也在那裏。哪一個是正確的? –

回答

3

鑑於串可以包含空格(按照編輯),正確的正則表達式是

^[ ?]*[?][ ?]*$ 

這允許任意數目的空格和問號,並保證至少一個問號存在。

5

這將是如此簡單:

^[?]+$ 

表達需要從一開始就^到底$字符串由問號[?](方括號防止解釋爲元字符)重複一次或多次+

+0

除非至少需要兩個問號,因爲「?」應該返回false。但是,真的很簡單的正則表達式。 – John

+1

@John奇怪的是:第3行表示'true',但最後一行對於單個問號表示'false'! – dasblinkenlight

+0

@John,這個問題似乎是個錯誤,因爲''「'被列爲返回true和false。 – dan1111

1

也許這是一個更好的想法逃脫問號(因爲我總是逃避所有符號):

^\?+$ 

你不需要在方括號要麼。

+1

*我總是逃避所有符號* - 更好的規則是逃避需要轉義的符號。作爲?在你的例子中。 – dan1111

+0

@ dan1111在正則表達式中,如果你轉義任何不是字母或數字的東西,它會認爲它是一個轉義符號,不會將其解釋爲其他任何東西。這對通過不同的正則表達式引擎的兼容性很好。 – texasbruce

0

使用正則表達式作爲^\\?+$

String regex = "^\\?+$"; 
    Pattern pattern = Pattern.compile(regex); 
    System.out.println(pattern.matcher("?").find());//prints true 
    System.out.println(pattern.matcher("??").find());//prints true 
    System.out.println(pattern.matcher("????").find());//prints true 
    System.out.println(pattern.matcher("?a?").find());//prints false 
    System.out.println(pattern.matcher("?a").find());//prints false 
1
/^(?=\s*\?)[?\s]+$/ 

的解釋:

^ 

匹配字符串的開頭

(?= ...) 

前瞻,什麼是一個零寬度斷言未來了在字符串中,這裏用來斷言:

\s* 

的任意數量的空格,依次爲:

\? 

文字問號。確保字符串中至少有一個問號。

[?\s] 

匹配問號或空格。

+ 

一次或多次。

$ 

匹配字符串的末尾。