2012-05-08 16 views
6

Pythonで動作する正規表現があり、Javaに変換しようとしています。実装には微妙な違いがあるようです。PythonとJavaの間のRegEx構文の相違点

RegExは別のreg exと一致させようとしています。問題の正規表現は次のようになります。それは上の問題を抱えている文字列の

/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B) 

一つである:REG EXは終了;に一致することが想定されていない/\s+/;

。 Pythonで正規表現は正しく機能(および終了;と一致していませんが、Javaでは、それは;

質問(s)は含んでいます:。私は、この正規表現はで働いてもらうために何ができるか

  1. をJavaの?
  2. 私はhereは、この正規表現には違いがあってはならない読んだものに基づいています。どこかでJavaの対Pythonで正規表現の実装の違いのリストはありますか?
+4

は、あなたの試合のためにPythonとJavaのコードを投稿してもらえますか? 「これはPythonでは起こりますが、Javaではできません」という意味を明確にすることはできますか?どの言語が文字列に一致していますか? – happydave

+0

正規表現はJavaScriptの正規表現リテラルと一致すると思われますが、そうですか?そしてそれはPythonで動作しますが、あなたはJavaでそれを実行したいのですか? –

+0

@happydave - 上記の質問を明確にしました。 – Vineet

答えて

10

Javaは、少数のケースに対してPythonと同じ方法で正規表現を解析しません。この特定のケースでは、ネストされた[が問題を引き起こしていました。 Pythonではネストされた[をエスケープする必要はありませんが、Javaでそれを行う必要があります。(Python用)

元正規表現:(JavaとPython用)

/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B) 

固定正規表現:

/(\\.|[^\[/\\\n]|\[(\\.|[^\]\\\n])*\])+/([gim]+\b|\B) 
5

明らかD ifference b/w JavaとPythonは、Javaでは多くの文字をエスケープする必要があります。

Javaのはmatcher.matches()(もPattern.matches(regex, input))が一致したJavaの

String regex, input; // initialized to something 
Matcher matcher = Pattern.compile(regex).matcher(input); 
  • を考える:

    また、あなたはおそらくマッチング方法、実際の正規表現の表記のない差とのミスマッチに実行されています文字列全体。 Pythonでは直接の同等の機能はありません。同じ結果は、$で終わるregexre.match(regex, input)を使用することによって達成できます。

  • Javaのmatcher.find()とPythonのre.search(regex, input)は、文字列の任意の部分に一致します。
  • Javaのmatcher.lookingAt()とPythonのre.match(regex, input)は、文字列の先頭に一致します。

詳細については、MatcherのJavaのドキュメントを参照してください。Python documentationと比較してください。

あなたはそれが問題ではないと述べたので、私はテストを行うことを決めた:http://ideone.com/6w61T javaはあなたはそれが(グループ0、マッチ全体、;が含まれていない)に必要な正確に何をやっているように見えます。あなたの問題は他の場所にあります。

+0

はい、文字がエスケープされています。方法の違いについての大きなポイント - それはここで問題ではないようです(私はそれを確認しました - それはreg exと何か間違っているようです)。 Pythonの 're.matchのためのものと同じ* *があるようです(http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html)。 'Javaで - これは' matcher.lookingAt'と思われます。 – Vineet

+0

@Vineet注目と編集。私もそれをテストし、あなたの問題は他の場所にあるようです。 – trutheality

関連する問題