2012-09-12 84 views
0

我有在Javascript工作正則表達式,現在我想將這些轉換爲Java:翻譯從JavaScript這些正則表達式到Java

  var nat_pattern2 = /^\d{8}$/; 
      var nat_pattern2 = /^\d{7}\-\d{1}$/; 

      var pct_pattern1 = /^\PCT\/?[A-Z]{2}?\d{4}\/\d{6}$/; 
      var ing pct_pattern2 = /^\PCT[A-Z]{2}\d{10}$/; 
      var pct_pattern3 = /^\P[A-Z]{2}\d{8}$/; 

      var its_pattern1 = /^\ITS\/?[A-Z]{2}?\d{2}\/\d{5}$/; 
      var its_pattern2 = /^\ITS[A-Z]{2}\d{7}$/; 
      var its_pattern3 = /^\I[A-Z]{2}\d{7}$/; 

我開始看起來是這樣,但它是不正確的:

Pattern pattern = Pattern.compile("/^\d{8}$/");

你能幫我嗎?

回答

2

在Java的正則表達式中,您並不需要/\d爲了成爲定義正則表達式的字符串的一部分而被轉義,所以它將變成\\d

Pattern pattern = Pattern.compile("^\\d{8}$"); 

斜線沒有特別的含義,所以也不需要轉義。

Pattern natPattern1 = Pattern.compile("^\\d{8}$"); 
Pattern natPattern2 = Pattern.compile("^\\d{7}-\\d{1}$"); 

Pattern pctPattern1 = Pattern.compile("^PCT/?[A-Z]{2}?\\d{4}/\\d{6}$"); 
Pattern pctPattern2 = Pattern.compile("^PCT[A-Z]{2}\\d{10}$"); 
Pattern pctPattern3 = Pattern.compile("^P[A-Z]{2}\\d{8}$"); 

Pattern itsPattern1 = Pattern.compile("^ITS/?[A-Z]{2}?\\d{2}/\\d{5}$"); 
Pattern itsPattern2 = Pattern.compile("^ITS[A-Z]{2}\\d{7}$"); 
Pattern itsPattern3 = Pattern.compile("^I[A-Z]{2}\\d{7}$"); 
+1

翻譯你的正則表達式...這意味着你不需要逃脫正則表達式中的斜槓,太。 –

+1

是的,他確實不需要他們。 – Alex

+0

謝謝,但我不確定這些是否正確。例如,字符串「PCT/SE2012/001083」應該匹配這些正則表達式中的一個,但它不會。你能幫我多一點,以驗證這些正則表達式確實匹配我提供的JavaScript正則表達式。非常感謝!我一直在研究這個問題一段時間,它不應該是一個非常困難的問題,只是一些模式匹配。 –

1

\用於Java-Strings中的轉義。因此你必須逃避。所以你的字符串看起來是這樣的:

Pattern pattern = Pattern.compile("^\\d{8}$"); 

如前所述,領先和結束/是不需要的。

請注意,如果你想匹配一個\你必須在你的正則表達式中逃脫它。這意味着你可以在Java String中雙重轉義它。 要匹配\,您必須用Java連接\\。

+0

謝謝你的回答。但爲什麼這些模式不匹配:「^ PCT /?[AZ] {2}?\\ d {4}/\\ d {6} $」應該匹配像「PCT/SE2012/001083」這樣的字符串它不是?當它的javascript版本匹配時,它不匹配的原因是什麼?某處有沒有不完整的地方? –

2

主要指向正則表達式轉換從JS到JAVA:

  • 無需周邊/
  • 的需要逃生(以下EG \\.代替\.\
  • 沒有必要逃避/(即\/變成/
  • 沒有最終標誌(例如g,i

現在,您可以在自己的;)

+1

而不是最終的標誌,''compile()'方法的參數像''我等''的Pattern.DOTALL'等... –

+0

@TimPietzcker絕對,好點。 – sp00m

+0

感謝您的回答。我已經設法從我的正則表達式得到一些結果,但匹配不完全相同,因爲它與JavaScript,我想。 「PCT/SE2012/001083」這個詞應該與其中一種模式相匹配,但它沒有。你能告訴我爲什麼嗎?謝謝。 –