用于匹配时间戳和名称的正则表达式



我正在使用这个正则表达式:

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. 这将匹配您的时间戳:([[^]]+?])组 1 匹配时间戳。

在这里测试它。

  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

最新更新