0

次の正規表現を使用して文字列内の用語をグループ化するためにJavaのマッチャーを使用しています。

Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");

これは私が問題を抱えている部分です:[^ \ s \\"]

スペース以外と、\ "などのぶら下がっているエスケープされた引用符のみに一致させたいのですが、文字クラス内で\\と\"をグループ化して、それらが一緒にのみ一致するようにする方法はありますか?

lookahead / lookbehindを使おうとしましたが、それをキャラクタークラスに含めると、正方形に戻ることがわかりました。

4

1 に答える 1

2

文字クラスは単一の文字に一致します。私があなたを正しく理解していれば、あなたは文字列だけを一致させたいでしょう\"。これを行うには、文字クラスはまったく必要ありません。正規表現\\"はすでにそれに一致しています。\\\\\"(Java文字列の中では、これはばかげているように見えますが、そこにあります。)

括弧を使用して物事をグループ化できます(\\\\\")。を使用して、このようなグループ内で交代することもできます|。したがって、非スペースまたは \"に一致させるには、次のようにします(\S|\\\\\")。(これ\Sはと同じであることに注意してください[^\s]。)

編集:私は十分な注意を払っていませんでした。\"次のように、またはスペース以外のすべてに一致させることができ(\\\\(?!")|[^\s\\])ます。

これはどうですか:([^\\s\\\\]|\\\\(?!"))\ これは、空白またはまたはの後に。\が続かないもの以外のものと一致する必要があり"ます。

于 2012-05-30T23:20:29.207 に答える