[英]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.