簡體   English   中英

嘗試匹配數字時出現 PHP 正則表達式問題

[英]PHP Regular Expression problem when trying to match numbers

我對 PHP 中的正則表達式有疑問。

我正在嘗試為我通過 CURL 收到的一些 header 數據找到匹配項。 但是,我的正則表達式匹配兩行,而不是一行。

下面是我的正則表達式模式:

/^(http\/\d\.\d)\s+(100)\s+([\w\-\s\/\'\"\(\)\\\.]+)$/im

這是我正在嘗試匹配的字符串:

HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Content-Length: 118
Content-Type: text/html; charset=UTF-8
Etag: 8c59b7e37f672374c61245c8115f53d0
Last-Modified: Tue, 16 Aug 2011 20:24:10 GMT
X-Trans-Id: txd6cbafcec90d4e30b2a108ff3157c1b1
Date: Tue, 16 Aug 2011 20:24:10 GMT

它應該與第一行匹配,但我得到了 100 和 201 的匹配。我不明白為什么要這樣做。

順便說一句,我正在使用 preg_match 。

關於如何解決這個問題的任何想法? 謝謝。

更新:

多行修飾符與真正原因正交。 您的問題是字符 class 定義(方括號之間)包含\s ,它匹配任何空白字符,包括換行符。 在這種情況下,將其替換為實際空間,以匹配它。

順便說一句,如果您有權在服務器上安裝擴展,您可能希望使用pecl_http擴展來解析 http,而不是手動進行。

@troelskn 是對的,但是您也可以詢問 CURL 告訴您 HTTP 響應代碼:

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

編輯:而不是:

/^(http\/\d\.\d)\s(100)\s([\w\-\s\/\'\"\(\)\\\.]+)$/im

嘗試( 正則表達式):

/^(http\/\d\.\d)\s(100)\s([\w\-\s\/\'\"\(\)\\\.]+?)$/im

暫無
暫無

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

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