1

我怎样才能只从从 ? 开始的查询字符串中获取内容:

asegment?param1=value1¶m2=value2

注意:我只需要“?”之后的所有内容,我也想省略那个字符。

4

6 回答 6

3

如果您确定您的字符串中有一个查询,那么这将起到作用:

echo substr( $string, strpos( $string, '?' ) + 1 );

如果您的字符串可能不包含查询,则首先检查 -strpos将返回布尔值 false。

于 2013-05-16T17:07:45.440 回答
2

这是 Regex\?(.+)Rubular 来证明它。并使用它:

preg_match("/\?(.+)/", $inputString, $matches);
if (!$matches) {
    // no matches
}

$result = $matches[1];
于 2013-05-16T17:06:13.780 回答
1

在此之前你有几个选项不需要像这样的正则表达式

$val = (strpos("?", $url) !== false? substr($url, strpos($url, "?")): "");

或 parse_url

$val = parse_url($url, PHP_URL_QUERY);

编辑

修复了没有查询字符串的情况

于 2013-05-16T17:07:00.447 回答
1

\?([a-z0-9A-z&=]+)*

看起来您正在处理 URL,请考虑为它们设计的库。如果您只对 ? 之后的所有内容感兴趣,请使用类似

String s = "asegment?param1=value1&param2=value2";
String paramStr = s.substring(s.indexOf('?')-1);

编辑:没有看到您使用的是 PHP - 忽略。

于 2013-05-16T17:11:56.067 回答
0

这是一个简单的解决方案,使用strrevstrtok...

$url = "asegment?param1=value1&param2=value2";
echo strrev(strtok(strrev($url),'?'));
于 2013-05-16T17:19:00.000 回答
0

您应该使用 $_GET 全局数组<?php echo $_GET["param1"]; ?>

于 2013-05-16T17:22:56.787 回答