2015-09-04 34 views
-1

我需要驗證和防止輸入字符串輸入'='(等號),我用正則表達式來捕獲它[=]*。但它也捕獲其他字符串。前輸入:2c450807-4a4c-4f18-bf4f-5a100ced87a0。上面的正則表達式也捕獲這個字符串。 請幫助我。正則表達式驗證問題

還有,任何人都可以請解釋我爲什麼這個正則表達式不捕捉輸入。我需要捕捉正則表達式中提到的特殊字符。

  final String REGEX="[.,%*$#@?^<!&>'|/\\\\~\\[\\]{}+=\"-]*"; 


      Pattern pattern = Pattern.compile(REGEX); 
      Matcher matcher = pattern.matcher("2c450807-4a4c-4f18-bf4f-5a100ced87a0"); 

      if (matcher.matches()) { 

       System.out.println("found"); 

      } 
      else{ 

       System.out.println("not found!"); 
      } 

此打印「未找到!」

+4

請提供您的完整相關代碼。也許你需要使用'='或'= +'?注意'[=] *'可以匹配一個空字符串,所以它會匹配任何*字符串。 –

+1

您可以簡單地使用someString.contains(「=」)來檢查它是否包含=或不。如果它包含,它將返回true。 –

+0

我建議使用英文拼寫檢查器,從您的問題中獲得更好的印象是非常有用的。 – peterh

回答

2

我認爲你的問題是*量詞允許出現0次前面的子模式。因此,[=]*匹配任何字符串。

你需要使用一個單純的

= 

然後你will not match2c450807-4a4c-4f18-bf4f-5a100ced87a0

另外請注意,=不是一個特殊的正則表達式字符,你不需要逃避它,或者放置到一個字符類以避免逃脫。

但是,正如在另一條評論中指出的那樣,如果您不必使用「正則表達式」,只需檢查一個字符串是否包含=str.contains("=")

2

當您使用正則表達式,你可能想找到根據的次數項目出現:

如果要匹配一組準確containering n符號(在你的情況:等號(=))你可以做這樣的事情:

(=){n} 

即:如果(myVar的=== myvalue的)匹配時n = 3

如果要匹配這個符號一次或多次:

(=)+ 

即:如果((myVar的= myvalue的)或(myVar的== myvalue的)或(myVar的=== myvalue的))

如果你想匹配可能會出現一個項目:

(=)* 

即:如果(myVar的< myvalue的)

該項目並不需要存在於你的表達檢查。該值可以是0到n次。