2016-10-22 134 views
-2
public class T_token implements Lexer{ 
     static Pattern p = Pattern.compile("\\(| \\) | a"); 
     static Matcher d = p.matcher("(a)"); 

     public static void main(String[] args) { 
      while (d.find()) { 
      System.out.println(d.group()); 
      } 
     } 

當我編譯和運行這個,輸出爲:模式匹配器不接受括號

run: 

a 

BUILD SUCCESSFUL (total time: 0 seconds) 

所以我給匹配器的輸入(變量d)爲字符串「(A)」,但它只打印出一個,而不是左括號和右括號......可以有人告訴我,我怎麼能解決這個問題?

+2

仔細閱讀'Pattern'的Javadoc。由於未轉義的括號是用於分組的元字符,因此必須轉義字面括號。我建議你停下來花點時間學習正則表達式的語法和語法。網上有很多資源,以及Javadoc。 –

+0

你的實際問題是什麼?你想達到什麼目的? – Tunaki

+0

我輸入的是(a)和因此我希望它打印(a),但它忽略了缺少,我編輯我的代碼有\\(和\\)但它仍然不起作用 – digeridoo

回答

0

,我們在您的正則表達式2個問題:

  1. 您加入提取物空間,例如,它會期望在模式空間找到這似乎並不爲你所期望的。
  2. 您沒有轉義用於分組的特殊字符的括號。你需要使用雙反斜槓來逃避它們。

您的正則表達式應該是\\(|\\)|a

輸出:

(
a 
) 
+0

謝謝,在我提出這個問題之前,我已經知道了\\(和\\),但我原始地添加了這個問題以查看是否還有其他問題,但實際問題是像您提到的那樣退格,並且它正常運行 – digeridoo