1

一部のシェル コードを解析する Java プログラムを作成しており、echo ステートメント内のコンテンツを削除したいと考えています。まず、echo コマンド全体を取り上げます。私の実際のパターンは次のようになります。

Pattern pat = Pattern.compile("echo[\\t ]+\".*?\"");

これは、echo + 少なくとも 1 つのスペースまたはタブ + 二重引用符 + 最小数の文字 (私は消極的な量指定子を使用しました) + 二重引用符に一致します。

問題は、次のようなエコーがある場合です。

echo "This will not \" work";

私のパターンは、バックスラッシュまでのみ一致します。これを修正するにはどうすればよいですか?

4

2 に答える 2

2

否定後読みを使用して、最後の文字が\:でないことを確認できます。

"echo[\\t ]+\".*?(?<!\\\\)\""

\\\\単一の\文字を表します。\\正規表現のためにエスケープする\必要があり、コンパイラのためにそれぞれを再度エスケープする必要があります。

テスト

look-around についての詳細

上記の問題は、echo "\\"一致しないことです (おそらく\エスケープ文字であり\\、文字を意味し\ます)。より正しい方法は、 をチェックし、それぞれに続く文字\を消費することです。\

"echo[\\t ]+\"(\\\\.|[^\\\\])*?\""

テスト

于 2013-07-11T11:49:59.457 に答える