1

次の正規表現を使用します。

\[\w* \w* \d{2} [\w:]* \d{4}\] \[error\] \[client .*?\] .*? Using HTTP not .*?<br /> 

次の結果が得られます (黄色のボックスは一致を示します)。

崇高なテキスト 2

生のテキスト: http://pastebin.com/vSi0mLGv

下の 2 つのセクションは正しいです。以下を含むすべてのセクションが必要です。&lt;&lt;&lt;NOTICE&gt;&gt;&gt; Non-Prod Server: Using HTTP not HTTP/S

ただし、上部のセクションには正しい文字列 (下部の 2 つと同様) が含まれていますが、必要のない別のチャンクも含まれています。

[Thu May 10 17:43:48 2012] [error] [client ::1] Current Name:
DashboardBar_projAnnualReview200, referer: http://
localhost/test/pages/TestPage.php<br />`

これは正規表現が貪欲であることに帰着することを知っていますが、それが<br />正しい方法である場合でも、 の遅延評価を行うにはどうすればよいですか。私は試してみましたが(<br />)*?、他の人は役に立ちませんでした。


その他の情報: 私はSublime Text 2を使用しており、誰かが画像を再作成したい場合は正規表現検索を実行しています。

4

2 に答える 2

4

問題は貪欲さではなく、熱心さです。正規表現エンジンは、可能な限り早い時期に照合を開始し、すべての可能性が尽きるまであきらめません。量指定子を貪欲でなくしてもそれは変わらず、可能性が試される順序が変わるだけです。

問題を引き起こしているのは ではなく、*です。試合の開始が早すぎるため、より制限的なものを使用する必要があります。この正規表現は、または以外の任意の文字に一致する にを置き換えたため、希望どおりに機能します。.*..*?[^][]*][

\[\w* \w* \d{2} [\w:]* \d{4}\] \[error\] \[client [^][]*\] [^][]* Using HTTP not .*?<br />

SublimeText が使用する正規表現のフレーバーがわからないため、文字クラス内の角括弧をエスケープする必要がある場合があります。

\[\w* \w* \d{2} [\w:]* \d{4}\] \[error\] \[client [^\]\[]*\] [^\]\[]* Using HTTP not .*?<br />
于 2012-05-11T03:36:11.230 に答える
2

「怠け者」ではなく、「気が進まない」という意味です。

介在してはいけません<br />よね?のようなものがうまくいく((?!<br />).)*かもしれません。

于 2012-05-11T03:22:52.287 に答える