选择两个可能匹配的内部

时间:2014-08-05 07:08:01

标签: regex

我想在以下字符串中进行匹配:

' return 0\r\nConnection to 172.29.28.79 closed by remote host.\r\r\nConnection to 172.29.28.79 closed.\r\r\n'

匹配的目标是Connection to 172.29.28.79 closed.问题是IP地址可能会更改为任何有意义的主机地址。与Connection .* closed\.的简单匹配将产生包含两个句子的结果,这是不期望的。

如何编写一个有意义的正则表达式,它只匹配以Connection开头的一个句子,以closed.结尾,并且中间有一些东西,我不知道'关心?

4 个答案:

答案 0 :(得分:2)

在正则表达式中更具体。由于IP不能包含空格,您可以写:

Connection to [^ ]* closed\.

转义.会阻止其与closed by remote host匹配 - 它只会匹配closed.

答案 1 :(得分:2)

你可以在这里使用lokahead。

Connection.+?closed\.(?=[\n\r]|$)

此正则表达式检查字符串closed后面的字符必须是.\n换行符)或{{1} }(回车)或\r(行尾。)

DEMO

答案 2 :(得分:1)

一个简单的正则表达式是Connection\sto\s(.+?)\sclosed\.DemoVisual explanation

答案 3 :(得分:0)

这个正则表达式怎么样(在C#中测试过)?

Regex regex = new Regex(@"Connection to \d{1,3}(\.\d{1,3}){3} closed\.");
Match match = regex.Match(str);

此正则表达式还会查找IP地址格式,以便在您有一行(例如“连接到www.example.com已关闭。”)时,该行不匹配。

Demo