2016-01-09 37 views
1

我想驗證字符串模式。如果字符串中沒有任何特殊字符,可以使用下面的代碼。java中的特殊字符模式匹配問題

例如:

Pattern p = Pattern.compile("Dear User, .* is your One Time Password(OTP) for registration.",Pattern.CASE_INSENSITIVE); 

    Matcher m = p.matcher("Dear User, 999 is your One Time Password(OTP) for registration."); 

    if (m.matches()){ 
     System.out.println("truee");     
    }else{ 
     System.out.println("false"); 
    } // output false 

和下方工作正常,如果我除去(和)。

Pattern p = Pattern.compile("Dear User, .* is your One Time Password OTP for registration.",Pattern.CASE_INSENSITIVE); 

    Matcher m = p.matcher("Dear User, 999 is your One Time Password OTP for registration."); 

    if (m.matches()){ 
     System.out.println("truee");     
    }else{ 
     System.out.println("false"); 
    } // output true 
+0

逃生括號和點。 –

回答

0

試試這個:

Pattern p = Pattern.compile("Dear User, .* is your One Time Password\\(OTP\\) for registration\\.",Pattern.CASE_INSENSITIVE); 

Matcher m = p.matcher("Dear User, 999 is your One Time Password(OTP) for registration."); 

if (m.matches()){ 
    System.out.println("truee");     
}else{ 
    System.out.println("false"); 
} 

(,)和。用於正則表達式。如果你想要正常的行爲,你需要逃避它們。

0

在正則表達式中,當你需要匹配它們時,你必須時刻提防特殊字符字面上

在這種情況下,你有3個特點:((用於打開一組),)(用於關閉組)和.(匹配任何字符)。

要從字面上匹配它們,您需要轉義它們,或放入字符類[...]

請參閱fixed demo

0

package com.ramesh.test;

import java.util.regex.Matcher; import java.util.regex.Pattern;

公共類PatternMatcher {

public boolean containsPattern(String input, String pattern) { 
    if (input == null || input.trim().isEmpty()) { 
     System.out.println("Incorrect format of string"); 
     return false; 
    } 
    // 「 * 」is replaced by 「 .* 」 in replaceAll() 
    //「 .* 」 Use this pattern to match any number, any string (including the empty string) of any characters. 
    String inputpattern = pattern.replaceAll("\\*", ".*"); 
    System.out.println("first input" + inputpattern); 
    Pattern p = Pattern.compile(inputpattern); 
    Matcher m = p.matcher(input); 
    boolean b = m.matches(); 
    return b; 
} 

public boolean containsPatternNot(String input1, String pattern1) { 
    return (containsPattern(input1, pattern1) == true ? false : true); 
} 

public static void main(String[] args) { 

    PatternMatcher m1 = new PatternMatcher(); 
    boolean a = m1.containsPattern("ma5&*%u&^()k5.r5gh^", "m*u*r*"); 
    System.out.println(a);// returns True 

    boolean d = m1.containsPattern("mur", "m*u*r*"); 
    System.out.println(d);// returns True 

    boolean c = m1.containsPatternNot("ma5&^%u&^()k56r5gh^", "m*u*r*"); 
    System.out.println(c);// returns false 

    boolean e = m1.containsPatternNot("mur", "m*u*r*"); 
    System.out.println(e);// returns false 

} 

}

輸出:真 真 假 假

+1

在replaceAll()方法中,「*」替換爲「。*」。 「。*」使用此模式匹配任何數字,任何字符的任何字符串(包括空字符串)。 –