2012-05-11 11 views
1

は以下の正規表現の使用:大きな正規表現に遅延評価を使う(だけでなく、*。?)

Sublime Text 2

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

を私は(黄色のボックスは一致を示す)は、次の結果を得ます

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

下の2つのセクションでは、correcありますt。私が含まれているすべてのセクションを望む:&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を使用して、そして誰もがイメージを再作成したい場合は正規表現検索を行っております。

+0

だけFYI、[遅延評価](http://en.wikipedia.org/wiki/Lazy_evaluation)正規表現とは何の関係もありません。 「怠け者」という言葉は、早期に正規表現の数量化の非貪欲な変種を記述するために使用されたものであり、間違いでした。 「貪欲でない」という言葉は彼らにとってははるかに良い言葉であり、「消極的」な表現はさらに正確です。 –

答えて

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 /> 
2

"怠け者"ではなく "嫌な"という意味です。

介入する必要はありません<br />、右ですか? ((?!<br />).)*のようなものが動作する可能性があります。

+0

はい、それも機能します。これは、 '[^] [] *'と同じように、元の正規表現の '。*? 'を置き換えるものです。 –

+0

私の状況ではうまくいきませんでしたが、どちらの答えでも正規表現についてもう少し詳しく学ぶことができました。ありがとう! –

関連する問題