2016-01-22 68 views
1

我想用正則表達式過濾* /%。下面的人都這麼遠我已經試過的:使用正則表達式在Java中過濾多個標誌

String reg = "[\\*]||[/]||[%]"; 
String reg2 = "[*]||[/]||[%]"; 
String reg3 = "*/%"; 

上述所有給出了這樣相同的例外:

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 * 

不過,我有另外一個其中挑選出多一點:

String reg4 = "[0-9\\*+\\-/%]"; 

那一個完美的工作。

我也嘗試過只對個別符號進行整理,唯一一個與之搏鬥的是「*」。我曾嘗試過的只有那一個是:

String reg1 = "*"; 
String reg2 = "\\*"; 
String reg3 = "[\\*]"; 

兩者都給出了與前面提到的相同的例外。


相關代碼:

/* 
* calc1 is an ArrayList<String> 
*/ 
public void solve() { 
    while(calc1.size() > 1) { 
     for(int i = 0; i < calc1.size(); i++) { 
      if(calc1.get(i).matches("regex")) calculate(i); 
     } 
    } 
    System.out.println(calc1.toString()); 
} 

編輯

建議嘗試:

String reg = "[*/%]"; 
String reg2 = "[\\*/%]"; 
+2

爲什麼不把全部放入字符類:'[* /%]'?看[demo](http://ideone.com/X75vjQ) –

+0

啊,我想你用'|'連接子模式吧? **請顯示所有相關代碼** –

+0

我得到了同樣的異常不幸 – Adrian

回答

0

注意String#matches需要一個完整的字符串匹配。要麼使用一個Matcher#find()(這將需要更多的代碼),或使用

if(calc1.get(i).matches("(?s).*" + regex + ".*")) calculate(i); 

其中regex是包含[*/%]或任何正則表達式,你有自己的變量。

(?s)將確保.也將匹配一個換行符,因此將確保一個完整的字符串(包含您在字符類中定義的字符)匹配。

如果您想要在等於的模式,你不需要.*位只處理字符串,但您需要申請一個量詞(如果可以有不止一個):

if(calc1.get(i).matches(regex + "+")) calculate(i); 

這個最終的+將匹配字符類中一個或多個符號的出現。