Php preg_用可能的问号匹配URL

Php preg_用可能的问号匹配URL,php,regex,Php,Regex,所以我有一个字符串(它是动态的)。它是$url。。现在,URL字符串有时可能如下所示: 或 现在我正在做 preg_match("/site.com\/(.*)/",$info[url],$matches); $gethash = $matches[1]; 但是当有一个?标记语句后记 如果有问号,我怎么能让它只抓取斜线(/)和问号之间的所有内容?如果没有问号,就抓取斜线(/)后面的所有内容。只排除?: preg_match('/site\.com\/([^?]*)/', $

所以我有一个字符串(它是动态的)。它是$url。。现在,URL字符串有时可能如下所示:

现在我正在做

    preg_match("/site.com\/(.*)/",$info[url],$matches);
    $gethash = $matches[1];
但是当有一个?标记语句后记


如果有问号,我怎么能让它只抓取斜线(/)和问号之间的所有内容?如果没有问号,就抓取斜线(/)后面的所有内容。

只排除

preg_match('/site\.com\/([^?]*)/', $info[url], $matches);

仅排除

preg_match('/site\.com\/([^?]*)/', $info[url], $matches);

仅供参考,这是因为正则表达式引擎试图获取尽可能多的字符(这是贪婪的)。“.”字符与任何字符匹配,因此正则表达式引擎将继续到字符串的末尾。通过告诉它不要匹配问号,它将匹配到无法再匹配为止,并在匹配文本中包含问号之前停止。我认为您可能需要避开问号,因为它在正则表达式中很特殊,所以您可以这样做:'/site\\\.com\\\/([^\\?]*)/'@Alex:问号不需要避开,但是句号需要,是的。@Alex:问号不需要转义,反斜杠也不需要双重转义,但是是的,你是对的,句号需要转义。我的错误。@Josh Daniels:这对我很有效,也许你可以给我一些比“那根本不起作用”更好的东西?仅供参考,这是因为正则表达式引擎试图获取尽可能多的字符(这是贪婪的)。“.”字符与任何字符匹配,因此正则表达式引擎将继续到字符串的末尾。通过告诉它不要匹配问号,它将匹配到无法再匹配为止,并在匹配文本中包含问号之前停止。我认为您可能需要避开问号,因为它在正则表达式中很特殊,所以您可以这样做:'/site\\\.com\\\/([^\\?]*)/'@Alex:问号不需要避开,但是句号需要,是的。@Alex:问号不需要转义,反斜杠也不需要双重转义,但是是的,你是对的,句号需要转义。我的错误。@Josh Daniels:这对我很有效,也许你可以给我一些比“那根本不起作用”更好的东西?