1

使用以下正则表达式:

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

我得到以下结果(黄色框表示匹配):

崇高的文字 2

原始文本: http: //pastebin.com/vSi0mLGv

下面两段是正确的。我想要包含以下内容的所有部分:&lt;&lt;&lt;NOTICE&gt;&gt;&gt; Non-Prod Server: Using HTTP not HTTP/S

然而,顶部包含正确的字符串(类似于底部两个),但还带有我不想要的另一个块:

[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

贪婪不是问题,渴望才是。正则表达式引擎在最早的机会开始尝试匹配,并且在用尽所有可能性之前它不会放弃。使量词不贪婪并不会改变这一点,它只会改变尝试可能性的顺序。

导致您的问题的不是*in .*,而是.. 你需要使用更严格的东西,因为它会让比赛过早开始。这个正则表达式可以按需要工作,因为我已经替换了.*?with [^][]*,它匹配除]or之外的任何字符[

\[\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 回答