2016-11-08 2 views
-6

なぜ私はfalseを2番目のものにしていますか?正規表現のパターンマッチングのためにfalseになる

正規表現:

入力 - "123.456.abc."

正規表現が試み - "[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\."

出力 - true

正規表現tried- "[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]"

インプット

出力 - false

public class TestRun {  
    public static void main(String[] args) { 
     Tester tester = new Tester(); 
     tester.check("[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\."); 
    } 
} 
class Tester { 
    public void check(String pattern){ 
     Scanner scanner = new Scanner(System.in); 
     String testString = scanner.nextLine(); 
     Pattern p = Pattern.compile(pattern); 
     Matcher m = p.matcher(testString); 
     boolean match = m.matches(); 
     System.out.format("%s", match); 
    }  
} 
+2

質問をする際に大きなオレンジ**書式設定**ボックスに注意し、投稿する前にプレビューを注意深く見てください。別のユーザーと私が作成した編集を参照してください。 –

+0

あなたは前のものと同じように最後の文字クラスを繰り返す必要があります... –

+1

'[a-zA-Z_0-9] +'は '[a-zA-Z_0-9] '。 –

答えて

2

あなたは正規表現の末尾に+を忘れてしまいました。

[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+ 

例:

import java.util.regex.*; 

class Example { 
    public static void main(String args[]) throws Exception { 
     String input = "123.456.abc.def"; 
     Pattern p1 = Pattern.compile("[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]"); 
     Matcher m1 = p1.matcher(input); 
     System.out.println(m1.matches()); // false 
     Pattern p2 = Pattern.compile("[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+"); 
     // Note ----------------------------------------------------------------------------------^ 
     Matcher m2 = p2.matcher(input); 
     System.out.println(m2.matches()); // true 
    } 
} 
1

あなたは正規表現であなたの最後の式における数量詞が欠落している: [a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+\\.[a-zA-Z_0-9]+

末尾に余分な+記号に注意してください。

関連する問題