したがって、コメントをスキップしながら、トークンの最初のインスタンスを別のトークンに置き換える、変更された文字列を返す必要があります。これが私が話していることの例です:
This whole quote is one big String
-- I don't want to replace this @@
But I want to replace this @@!
元 .NET 開発者だったので、これは簡単だと思いました。次のように否定的な後読みを行うだけです。
(?<!--.*)@@
しかしその後、Java ではこれができないことを知りました。したがって、中括弧が問題ないことを知ったとき、私はこれを試しました:
(?<!--.{0,9001})@@
これは例外をスローしませんでしたが、コメントの @@ と一致しました。
この正規表現を Java 正規表現テスターでテストすると、期待どおりに動作します。私が思いつく唯一のことは、Java 1.5 を使用しているということです。Java 1.5 の正規表現エンジンにバグがある可能性はありますか? そうだとすると、Java 1.5 に、文字列を分割して再構築することなく、やりたいことをさせるにはどうすればよいでしょうか?
編集# を -- 演算子に変更しました。これは、正規表現が 1 つではなく 2 つの文字でより複雑になるように見えるためです。私は当初、「クエリをそのように変更するべきではありません!」というトピックから外れた議論を避けるために、クエリを変更していることを明らかにしませんでした。私がこれを行うのには非常に正当な理由があります。クエリ変更の推奨事項については議論しないでください。ありがとう