用于匹配http标头中的URI的最佳正则表达式

时间:2014-02-27 05:36:46

标签: php regex

我有http标题字符串

GET /phpmyadmin/sql.php?db=monitor&table=boundries&token=08b1cd52b3bc0068ea470988e292f54d&pos=0 HTTP/1.1
Host: mylocalwebhost.net

以上是我将通过文件接收的示例字符串。在每个字符串中,我需要检查第一行的有效性。

'GET'部分可以是GET PUT POST DELETE中的任何一个。

如何使用正则表达式匹配第一行。请有人向我提供一个有效的正则表达式,我可以使用php preg_match()

2 个答案:

答案 0 :(得分:1)

正则表达式

/^(?:GET|PUT|POST|DELETE) (.*?) \S+$/m

代码

<?php
$re = '/^(?:GET|PUT|POST|DELETE) (.*?) \S+$/m'; 
$str = 'GET /phpmyadmin/sql.php?db=monitor&table=boundries&token=08b1cd52b3bc0068ea470988e292f54d&pos=0 HTTP/1.1
        Host: mylocalwebhost.net'; 

preg_match($re, $str, $matches);
echo $matches[0];

答案 1 :(得分:0)

试试这个:

$string = '//phpmyadmin/sql.php?db=monitor&table=boundries&token=08b1cd52b3bc0068ea470988e292f54d&pos=0';

$parts = explode("&", $string);
$parts = array_map("trim", $parts);
foreach($parts as $current)
{
    list($key, $value) = explode("=", $current);
    $data[$key] = $value;
}

echo '<pre>';
print_r($data);
echo '</pre>';

结果是:

Array
(
    [//phpmyadmin/sql.php?db] => monitor
    [table] => boundries
    [token] => 08b1cd52b3bc0068ea470988e292f54d
    [pos] => 0
)
相关问题