如何使用正则表达式捕获 http 状态代码的第二个词?
How to capture second word of an http status code using regex?
我想使用正则表达式捕获 http 状态代码名称。
这是日志文件条目示例文本:
Completed in 0.01434 (69 reqs/sec) | Rendering: 0.00006 (0%) | DB: 0.00220 (15%) | 404 Not Found [https://www.sample.com/page/soaps/1.xml]
众所周知,http 状态代码因每个日志文件条目而异。它可以是以下之一:
200 OK
401 Unauthorized
201 Created
422 Unprocessable Entity
302 Found
404 Not Found
我的捕获组应包含以下任一内容:
OK
Unauthorized
Created
Unprocessable Entity
Found
Not Found
我当前的正则表达式如下所示:
\D+(\d+(?:\.\d+)?\s*\([^)]+\))\D+(\d+(?:\.\d+)?\s*\([^)]+\))\D+(\d+(?:\.\d+)?\s*\([^)]+\))\D+(\d{1,3})\D+([A-Z]{2}|[A-Z][a-z]{1,12}(\s[A-Z][a-z]{1,10})?)\D+(\[.*\])\K
但是如果你在 www.regex101.com 中 运行 它,你会发现它没有注册一个带有两个词的 http 状态代码(即无法处理的实体和未找到)。
我做错了什么?
你可以使用这个正则表达式
.*\| (\d+)\s+((?:\w|[^\S\r\n])*)
第一个捕获组是错误代码,第二个是消息。请注意,这不会捕获 link,如果没有 link,它会起作用。
作品如下
- .*\| -> 点是一个贪婪的匹配,所以它捕获了最后一个
|
之前的所有内容
- 第一个捕获组
- \d+ -> 一个或多个数字
- \s+ -> 一个或多个 spaces
- 第二个捕获组
- ?: -> 表明该组是非捕获组。
- 任何单词字符或任何space但没有新行零个或多个(如果您确定有一条消息,您可以用加号替换星号)
为了不捕获换行符,我放置了一个双重否定正则表达式。 \S
表示没有白色-space,我用 ^
否定它。所以 [^S\r\n]
表示除了新行之外没有白色-space 字符。
我想使用正则表达式捕获 http 状态代码名称。
这是日志文件条目示例文本:
Completed in 0.01434 (69 reqs/sec) | Rendering: 0.00006 (0%) | DB: 0.00220 (15%) | 404 Not Found [https://www.sample.com/page/soaps/1.xml]
众所周知,http 状态代码因每个日志文件条目而异。它可以是以下之一:
200 OK
401 Unauthorized
201 Created
422 Unprocessable Entity
302 Found
404 Not Found
我的捕获组应包含以下任一内容:
OK
Unauthorized
Created
Unprocessable Entity
Found
Not Found
我当前的正则表达式如下所示:
\D+(\d+(?:\.\d+)?\s*\([^)]+\))\D+(\d+(?:\.\d+)?\s*\([^)]+\))\D+(\d+(?:\.\d+)?\s*\([^)]+\))\D+(\d{1,3})\D+([A-Z]{2}|[A-Z][a-z]{1,12}(\s[A-Z][a-z]{1,10})?)\D+(\[.*\])\K
但是如果你在 www.regex101.com 中 运行 它,你会发现它没有注册一个带有两个词的 http 状态代码(即无法处理的实体和未找到)。
我做错了什么?
你可以使用这个正则表达式
.*\| (\d+)\s+((?:\w|[^\S\r\n])*)
第一个捕获组是错误代码,第二个是消息。请注意,这不会捕获 link,如果没有 link,它会起作用。 作品如下
- .*\| -> 点是一个贪婪的匹配,所以它捕获了最后一个
|
之前的所有内容
- 第一个捕获组
- \d+ -> 一个或多个数字
- \s+ -> 一个或多个 spaces
- 第二个捕获组
- ?: -> 表明该组是非捕获组。
- 任何单词字符或任何space但没有新行零个或多个(如果您确定有一条消息,您可以用加号替换星号)
为了不捕获换行符,我放置了一个双重否定正则表达式。 \S
表示没有白色-space,我用 ^
否定它。所以 [^S\r\n]
表示除了新行之外没有白色-space 字符。