尝试匹配数字时出现PHP正则表达式问题
我对PHP中的正则表达式有一个问题 我试图为通过CURL接收到的一些头数据找到匹配项。然而,我的正则表达式匹配两行,而不是一行 下面是我的正则表达式模式:尝试匹配数字时出现PHP正则表达式问题,php,preg-match,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=U
/^(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
有没有办法解决这个问题?谢谢。更新:
“多行”修改器与实际原因正交。您的问题是字符类定义(在方括号之间)包括\s
,它匹配任何空白字符,包括换行符。在本例中,将其替换为实际的空格,以匹配该空格
另一方面,如果您有权在服务器上安装扩展,您可能希望使用该扩展解析http,而不是手动执行。Update:
“多行”修改器与实际原因正交。您的问题是字符类定义(在方括号之间)包括\s
,它匹配任何空白字符,包括换行符。在本例中,将其替换为实际的空格,以匹配该空格
另一方面,如果您有权在服务器上安装扩展,您可能希望使用扩展解析http,而不是手动解析。@troelskn是正确的,但是您也可以让CURL告诉您http响应代码:
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
编辑:而不是:
/^(http\/\d\.\d)\s(100)\s([\w\-\s\/\'\"\(\)\\\.]+)$/im
Try():
@Troleskn是对的,但是您也可以让CURL告诉您HTTP响应代码:
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
编辑:而不是:
/^(http\/\d\.\d)\s(100)\s([\w\-\s\/\'\"\(\)\\\.]+)$/im
Try():
谢谢,但这不管用。如果你有时间,你可以在regexpal.com上试试,看看我的意思。你是对的,我应该在回答你的问题之前测试一下。我更新了一个新答案。太棒了。实际上,我将停止使用\s.funcy,但是当我在PHP的末尾加上“\n”时,第一个正则表达式在PHP中工作,但在正则表达式中失败。无论如何,删除\s并添加手动空间是一个更优雅的解决方案。谢谢,但这不起作用。如果你有时间,你可以在regexpal.com上试试,看看我的意思。你是对的,我应该在回答你的问题之前测试一下。我更新了一个新答案。太棒了。实际上,我将停止使用\s.funcy,但是当我在PHP的末尾加上“\n”时,第一个正则表达式在PHP中工作,但在正则表达式中失败。无论如何,去掉\s并添加手动空间是一个更优雅的解决方案。