我有以下pcre正则表达式:
^(.+\/.*\.php)(\?)?(\/.+)$
此示例网址:
/subdir/file.php/this/is/a/path/info?par=am1¶m=2
正则表达式首先在#1组/subdir/file.php和#2组中写入捕获/ this /是/ a / path / info?par = am1& param = 2.
我需要将第4组分成参数(在?之后)。并获得以下内容:
组#1:/subdir/file.php 组#3:/ this /是/ a / path / info 第4组:?par = am1& param = 2
有时,网址没有参数。在这种情况下,我只需要匹配#1和#2组。
我试过这个:
^(.+\/.*\.php)(\?)?(\/.+)(\?.*)$
但是如果URL没有参数,则它与#1和#3组(/subdir/file.php和/ this / is / a / path / info)不匹配。 / p>
我该怎么做?
谢谢!
答案 0 :(得分:0)
您可以使用urlparse
和preg_split
来分割获得的路径:
$url = "/subdir/file.php/this/is/a/path/info?par=am1¶m=2";
$pth = parse_url($url, PHP_URL_PATH);
$chunks = preg_split('~(?<=\.php)(?=/)~', $pth);
foreach ($chunks as $chunk) {
echo $chunk . "\n"; // => /subdir/file.php and /this/is/a/path/info
}
echo parse_url($url, PHP_URL_QUERY) . "\n"; // => par=am1¶m=2
请参阅PHP demo
请注意,使用preg_split('~(?<=\.php)(?=/)~', $pth)
,最终会得到尽可能多的some.php
块,因为路径中有这样的块。 (?<=\.php)(?=/)
模式匹配.php
和/
子字符串之间的空位置。