我想从如下所示的日志中提取URL字符串:
<13> 3月27日11:22:38 144.0.116.31 AgentDevice = WindowsDNS AgentLogFile = DNS.log PluginVersion = XXXX Date = 3/27/2019 Time = 11:22:34 AM线程ID = 11BC Context = PACKET消息=内部数据包标识符= 0000007A4843E100 UDP / TCP指示器= UDP发送/接收指示器= Snd远程IP = XXXX Xid(十六进制)= 9b01查询/响应= R操作码= Q标志(十六进制)= 8081标志(字符代码)= DR响应代码= NOERROR问题类型= A问题名称= outlook.office365.com
我正在寻找提取包含超过5位数字的名称文本。
建议的一种可能方法是(\d.*?){5,}
,但似乎不起作用,请提出另一种获取该字段的方法。
字符串匹配示例:
outlook12.office345.com outlook.office12345.com
答案 0 :(得分:0)
尝试以下模式:(?=\b.*(?:\d[^\d\s]*){5,})\S*
说明:
(?=...)
-正向超前,确保其中的模式与前面的某处匹配:)
\b
-单词边界
(?:...)
-非捕获组
\d[^\d\s]*
-匹配数字\d
,然后匹配零个或多个除空格\s
或数字\d
以外的任何字符
{5,}
-匹配前面的模式5次或更多次
\S*
-如果断言为true,则匹配空格中的零个或多个字符以匹配字符串,但是我认为您只需要断言:)
如果只希望连续的数字,请使用简化模式(?=\b.*\d{5,})\S*
。
当然,您必须在后面加上正号:(?<=Name=)
,以断言您Name=
的字符串先于
答案 1 :(得分:0)
此正则表达式:
(?<=Name=).*\d{5,}.*?(?=\s|$)
将从示例输入中提取诸如outlook.office365666.com
(具有5个或更多连续数字)的字符串。
答案 2 :(得分:0)
您可以寻找以下表达式:
Name=([^ ]*\d{5,}[^ ]*)
说明:
Name=
查找以“ Name =“开头的任何内容,然后在以下情况下进行捕获:
[^ ]*
任意数量的字符,不能包含空格
\d{5,}
,然后连续5位数
[^ ]*
,然后再一次,所有数字最多到空格
答案 3 :(得分:-1)
尝试此正则表达式
([a-z0-9]{5,}.[a-z0-9]{5,})+.com
https://regex101.com/r/OzsChv/3
它分组,
outlook.office365.com
outlook12.office345.com
还有所有网址字符串