尝试匹配数字时出现PHP正则表达式问题

时间:2011-08-16 20:38:57

标签: php preg-match

我在PHP中遇到正则表达式的问题。

我正在尝试找到通过CURL收到的某些标头数据的匹配项。但是,我的正则表达式匹配两行,而不是一行。

以下是我的正则表达式:

/^(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。

关于如何解决这个问题的任何想法?感谢。

2 个答案:

答案 0 :(得分:2)

更新

多线修改器与真实原因正交。您的问题是字符类定义(方括号之间)包含\s,它匹配任何空格字符,包括换行符。在这种情况下,将其替换为实际空间,以便与之匹配。

另外,如果您有权在服务器上安装扩展程序,则可能需要使用pecl_http扩展名来解析http,而不是手动执行。

答案 1 :(得分:-1)

@troelskn是对的,但您也可以要求CURL告诉您HTTP响应代码:

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

编辑:而不是:

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

尝试(RegexPal):

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