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



我有 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()

正则表达式

/^(?: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];

试试这个:

$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
)

最新更新