3

Apache ログを解析しようとしていますが、リファラーの正しい構文に問題があります。リファラーは文字列"(二重引用符) であり、その\"中にも含まれている可能性があるためです。

"([^"]*)" 文字列に a がある場合は機能しません\"

最初の二重引用符から始めて、二重引用符ではないすべての文字を取得するにはどうすればよい\"ですか?

4

4 に答える 4

3

これを使用できます:

"((?:[^"]|\\")*)"

二重引用符またはスラッシュと二重引用符のペア以外の 0 個以上の任意の文字に一致し、すべて二重引用符で囲まれています。

于 2013-07-19T20:33:50.890 に答える
1

たとえば、文字列に他のエスケープがあります"hello \\"か? その場合、より一般的なアプローチが必要です。

"((?:\\.|[^"\\])*)"
于 2013-07-19T20:38:03.657 に答える
1

これはどう?\クロージング前にa を除外するための否定後読み"

"(.+?)(?<!\\)"
于 2013-07-19T20:55:25.610 に答える
0

これは、間に任意の数のエスケープされた引用符がある 2 つの引用符に一致します。

"\([^"]\|\\"\)*"

まず、引用符を探します。次に、以下のゼロから無限を検索します。

  • 非引用文字
  • バックスラッシュが前にある引用文字
于 2013-07-19T20:37:17.773 に答える