2012-08-31 13 views
12

私はポンド#修飾子を持つ正規表現を持っています。正規表現のポンド(#)の意味

\#は正規表現ではどういう意味ですか?正規表現で#の意味は何ですか? Javaがこれらの無効な修飾子を無視している可能性はありますか?

+0

\#は修飾語ではありません。 – Toto

+0

エスケープ文字ではありませんか?しかし、#の目的を確認していない。 – AxGryndr

+0

デリミタとして '# 'を使用したPCRE正規表現から始まる可能性があります。 – Joey

答えて

12

\#は有効な正規表現修飾語ではありません。これは、技術的に#文字をエスケープする方法です。#は、Javaの正規表現で意味のあるものを意味します。そうではないので、Javaはこの無効を無視して、エラーを投げるのではなく#として読んでいます。

+10

[ドキュメント](http://docs.oracle.com /javase/6/docs/api/java/util/regex/Pattern.html#compile(java.lang.String))は、実際にこのことを説明しています。「表示していないアルファベット文字の前にバックスラッシュを使用するとエラーになりますこれらの文字はエスケープされた構造体の一部であるかどうかにかかわらず、アルファベット以外の文字の前にバックスラッシュを使用することができます。 – millimoose

+0

@millimoose優れた発見。 – Eric

1

疑いがあるように、それは単なる間違いです。

確かに、私は走った:

String quote = Pattern.quote("_#_"); 

をして出力した:

"\Q_#_\E" 

ので、明確に、シャープ記号( "#")は、Javaの正規表現のための特別な文字ではありません。

参照:私はちょうどこれと同じ問題があったPattern.quote()

2

。以前のプログラマーは、すべての「古いコード」を#から|に変更すると「逃した」ということが判明しました。これは簡単な間違いでした。私はアプリ内の他のコードをすべてチェックして見つけましたが、他の#シンボルは見つかりませんでしたが、多くの同様のコード領域が|となっています。 |はこのコードの#のすぐ隣にありました。だから誰かが新しい正規表現と "見逃し"のための古い正規表現を交換していた。

関連する問題