2011-01-31 13 views
2

正規表現を使用してプログラムを作成しようとしています。私の別の質問で説明したように、識別子の書式は、文字で始めることができます(残りの部分には何でも含めることができます)。私はこの部分を大部分のために整えました。 しかし、引用符内のものはいずれも識別子として数えることはできません。Java正規表現質問 - 引用符を無視する

現在、私はPattern pattern = Pattern.compile("[A-Za-z][_A-Za-z0-9]*");を私のパターンとして使用しています。これは、最初の文字は文字のみであることを示しています。では、単語を引用符で囲んでいるかどうかを確認するために、これを編集するにはどうしたらいいですか?

+0

これはちょうど古いレガシーASCIIデータですか、それとも実際のJava文字データなので適切なUnicodeですか?文字のプロパティは '\ pL'です。 Javaは '\ p {Quotation_Mark} 'プロパティをまだサポートしていないので、' ["'«» ''、" "" <>] 'のようなものを使って何かを束縛しなければなりません。 – tchrist

+0

@tchrist私はあなたがJavaで悪いUnicodeサポートをwrtに同意している間、私はOPがUnicodeに興味がないと言っています。私の* identifier *は上記の正規表現で記述された考えと同じもので、引用符で囲まれた識別子*はU + 0022で囲まれたものです(少なくとも私がプログラムのようなデータを扱う場合) – maaartinus

答えて

3

使用負lookaroundアサーション:

"(?<!\")\\b[A-Za-z][_A-Za-z0-9]*\\b(?!\")" 

例:

Pattern pattern = Pattern.compile("(?<!\")\\b[A-Za-z][_A-Za-z0-9]*\\b(?!\")"); 
Matcher matcher = pattern.matcher("Foo \"bar\" baz"); 
while (matcher.find()) 
{ 
    System.out.println(matcher.group()); 
} 

出力:

 
Foo 
baz 

それがオンラインで作業を参照してください:ideone

+0

Javaのものではなく、ネイティブキャラクターセット!! – tchrist

2

ルックアラウンドを使用してください。 「前の文字が引用符または文字でない場合は、」

"(?<![\"A-Za-z])[A-Z... 

(?<![\"A-Za-z])部分が意味しています。

関連する問題