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

时间:2018-03-24 20:43:09

标签: regex

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

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个名称:

^.*(\bRaphael\b)\s.*(\bVarane\b)\s.*

对于第二部分,请求是使用一个正则表达式查询来查找两个时间戳。

3 个答案:

答案 0 :(得分:1)

  1. 这将与您的时间戳匹配:(\[[^\]]+?\])第1组与时间戳匹配。
  2. Test it here.

    1. 如果您希望使用同一匹配中的组匹配名称和时间戳,则应该有效:\-([A-Za-z]+?)[\s](\[[^\]]+?\])组1匹配第一个匹配中的名称,组2匹配时间戳。
    2. Test it here.

答案 1 :(得分:0)

如果来自:

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

您希望收到:(Demo

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\[([^\]]+)~ Demo

答案 2 :(得分:0)

正则表达式/ - (\ 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