簡體   English   中英

如何使用正則表達式捕獲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上運行它,則會看到它沒有用兩個詞(即Unprocessable Entity和Not Found)注冊一個http狀態代碼。

我究竟做錯了什么?

您可以使用此正則表達式

.*\| (\d+)\s+((?:\w|[^\S\r\n])*)

第一個捕獲組是錯誤代碼,第二個是消息。 請注意,這不會捕獲鏈接,如果沒有鏈接,它將起作用。 件如下

  • 。* \\ | ->點是貪婪的匹配,因此它將捕獲到最后的所有內容|
  • 第一捕獲組
    • \\ d +->一個或多個數字
  • \\ s +->一個或多個空格
  • 第二捕獲組
    • ?:->表示該組是非捕獲組。
    • 任何文字字符任何空格,但沒有零或更多的新行(如果您確定有消息,則可以用加號替換星號)

為了不捕獲換行符,我使用了雙負正則表達式。 \\S表示沒有空格,我用^ 因此[^S\\r\\n]表示除換行外沒有空格字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM