我想在以下字符串中进行匹配:
' 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.
结尾,并且中间有一些东西,我不知道'关心?
答案 0 :(得分:2)
在正则表达式中更具体。由于IP不能包含空格,您可以写:
Connection to [^ ]* closed\.
转义.
会阻止其与closed by remote host
匹配 - 它只会匹配closed.
答案 1 :(得分:2)
你可以在这里使用lokahead。
Connection.+?closed\.(?=[\n\r]|$)
此正则表达式检查字符串closed
后面的字符必须是.
和\n
(换行符)或{{1} }(回车)或\r
(行尾。)
答案 2 :(得分:1)
一个简单的正则表达式是Connection\sto\s(.+?)\sclosed\.
。
Demo,
Visual 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已关闭。”)时,该行不匹配。