我正在使用这个正则表达式:
127.0.0.1 -Raphane [10/Oct/2008:14:55:38 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326127.0.0.1 -Varane [10/Dec/2007:13:12:02 -0700] "GET /apache_pbs.gif HTTP/1.0" 404 2336
我正在尝试匹配时间戳和名称。我能够让它适用于名称,但不适用于时间戳。
对于 name,我首先匹配了整个字符串,并使用 2 组在具有此正则表达式的单个查询中查找 2 个名称:
^.*(bRaphaelb)s.*(bVaraneb)s.*
对于第二部分,请求是有一个正则表达式查询来查找两个时间戳。
- 这将匹配您的时间戳:
([[^]]+?])
组 1 匹配时间戳。
在这里测试它。
- 如果要使用同一匹配项中的组来匹配名称和时间戳,这应该有效:
-([A-Za-z]+?)[s]([[^]]+?])
组 1 匹配第一个匹配项中的名称,组 2 匹配时间戳。
在这里测试它。
如果来自:
127.0.0.1 -Raphane [10/Oct/2008:14:55:38 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326127.0.0.1 -Varane [10/Dec/2007:13:12:02 -0700] "GET /apache_pbs.gif HTTP/1.0" 404 2336
您希望接收:(演示(
Match 1
Full match 10-46 `-Raphane [10/Oct/2008:14:55:38 -0700`
Group 1. 11-18 `Raphane`
Group 2. 20-46 `10/Oct/2008:14:55:38 -0700`
Match 2
Full match 96-131 `-Varane [10/Dec/2007:13:12:02 -0700`
Group 1. 97-103 `Varane`
Group 2. 105-131 `10/Dec/2007:13:12:02 -0700`
然后使用: ~-([^s]+)s[([^]]+)~
s
将匹配空格字符是空格还是制表符。[^...]+
表达式是否定字符类,它们将贪婪地(最有效地(匹配方括号内未列出的一个或多个字符。 前导-
不需要使用反斜杠进行转义。
如果您特别想将这两个名称与包含更多名称的较大文本匹配,则可以使用: ~-(Raphane|Varane)s[([^]]+)~
演示
regex/-(\S+(\s[([^]]+(/
Match 1
Full match 10-46 `-Raphane [10/Oct/2008:14:55:38 -0700`
Group 1. 11-18 `Raphane`
Group 2. 20-46 `10/Oct/2008:14:55:38 -0700`
Match 2
Full match 96-131 `-Varane [10/Dec/2007:13:12:02 -0700`
Group 1. 97-103 `Varane`
Group 2. 105-131 `10/Dec/2007:13:12:02 -0700`
这是演示。
https://regex101.com/r/xpnvth/1