2016-10-25 14 views
-1

私はこの正規表現を\\s.*\\s|\\sとしていますが、文字列の先頭または末尾に空白(オプション、任意の数の空白を持つことができません) 。文字列の先頭と末尾に余白を入れる正規表現

String regex = "\\s.*\\s|\\s"; 
System.out.println("Hello World".matches(regex)); -> FALSE 
System.out.println(" Hello World ".matches(regex)); -> TRUE 
System.out.println(" Hello World".matches(regex)); -> FALSE 
System.out.println("Hello World ".matches(regex)); -> FALSE 

私は私の正規表現で間違っ

+2

正規表現で何が問題なのかを明確にしてください。上記のコードは、与えられた正規表現ごとの適切な値を示しています。あなたは何を期待しますか?おそらく、最後の '\ s'は' ''にマッチするように定量化されるべきです。 '' \\ s。* \\ s | \\ s * "' –

+2

おそらく['"(?s)\\ s。 * |。* \\ s | \\ s * "'](http://ideone.com/J1vtGv)はあなたが求めるものですか? –

+1

フィードバックはありますか?私の最後の提案は必要なものですか? –

答えて

0

を行くよどこ次のパターンは、私のために働いていた私に教えて、助けてください:

@Test 
public void testRegex() { 
    final String regex = "\\s*.+\\s*"; 
    assertTrue(Pattern.matches(regex, "Hello World")); 
    assertTrue(Pattern.matches(regex, " Hello World")); 
    assertTrue(Pattern.matches(regex, " Hello World ")); 
    assertTrue(Pattern.matches(regex, "Hello World ")); 
    assertTrue(Pattern.matches(regex, " ")); 
} 

*文字は前回値の0以上にマッチしますこの場合、空白(\ s)です。正規表現の先頭と末尾にある\ s *は、先頭または末尾に任意の空白を置きます。 。任意の文字にマッチし、+は1つ以上を意味するので、。+はあなたのスペースの中間を許します。

私の正規表現では、 ""と完全に一致しています。あなたのニーズに一層良くマッチするためには、より多くの要件を知る必要があると思います。

+0

あなたの '\\ s *。+ \\ s *'( '。+')正規表現では、改行や1文字以上の文字列は一致しません。 –

+0

私はWiktorに同意しますが、この正規表現を保持しているリクエスト変数に改行はありません。 – Woody

関連する問題