Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果一个组存在,但如果不存在,如何捕获该组,以匹配正则表达式的其余部分?_Php_Regex_Pcre - Fatal编程技术网

Php 如果一个组存在,但如果不存在,如何捕获该组,以匹配正则表达式的其余部分?

Php 如果一个组存在,但如果不存在,如何捕获该组,以匹配正则表达式的其余部分?,php,regex,pcre,Php,Regex,Pcre,我有以下pcre正则表达式: ^(.+\/.*\.php)(\?)?(\/.+)$ 这个示例URL: /subdir/file.php/this/is/a/path/info?par=am1&param=2 regex-previosuly在#1 group/subdir/file.php和#2 group/this/is/a/path/info?par=am1¶m=2中写入捕获 我需要将参数分成第四组(在?)之后。并获得以下信息: 组#1:/subdir/file.php

我有以下pcre正则表达式:

^(.+\/.*\.php)(\?)?(\/.+)$
这个示例URL:

/subdir/file.php/this/is/a/path/info?par=am1&param=2
regex-previosuly在#1 group/subdir/file.php和#2 group/this/is/a/path/info?par=am1¶m=2中写入捕获

我需要将参数分成第四组(在?)之后。并获得以下信息:

组#1:/subdir/file.php 第三组:/this/is/a/path/info 第4组:par=am1和PARM=2

有时,URL没有参数。在这种情况下,我只需要匹配#1和#2组

我试过这个:

^(.+\/.*\.php)(\?)?(\/.+)(\?.*)$
但如果URL没有参数,则与#1和#3组不匹配(/subdir/file.php和/this/is/a/path/info)

我该怎么做

谢谢

您可以使用和来分割获得的路径:

$url = "/subdir/file.php/this/is/a/path/info?par=am1&param=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&param=2
$url=“/subdir/file.php/this/is/a/path/info?par=am1¶m=2”;
$pth=parse_url($url,PHP_url_路径);
$chunks=preg_split('~(?您可以使用和也可以分割获得的路径:

$url = "/subdir/file.php/this/is/a/path/info?par=am1&param=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&param=2
$url=“/subdir/file.php/this/is/a/path/info?par=am1¶m=2”;
$pth=parse_url($url,PHP_url_路径);

$chunks=preg_split('~(?
parse_url
比复杂的regex@anubhava我之所以编写正则表达式是因为
parse_url
在path参数上返回/subdir/test.php/this/is/a/path/info,我需要/this/is/a/path/info为什么不合并它们?使用
parse_url
然后将正则表达式应用于path参数。像这样?
^(.+\/.\.php)([^?]+)(\?.*)?$
解析url
比复杂的regex@anubhava我之所以编写正则表达式是因为
parse_url
在path参数上返回/subdir/test.php/this/is/a/path/info,我需要/this/is/a/path/info为什么不合并它们?使用
parse_url
然后将正则表达式应用于path参数。像这样e> ^(+\/.\.php)([^?]+)(\?.*)$
很好的解决方案!它比我的复杂正则表达式更简单。谢谢!很好的解决方案!它比我的复杂正则表达式更简单。谢谢!