2012-02-12 112 views
0

我应该使用什么正则表达式来从URL字符串中提取下面的参数提取参数:正则表达式:从URL

/?c=135&a=1341 

我基本上是想从这个字符串的a参数的值。

感谢,

+0

这个网址有两个参数。你想要哪一个? – bmargulies 2012-02-12 16:53:22

+0

正如我的问题所指出的,我正在寻找提取'a'值。我已经解决了它..看到答案形式'彩旗' – 2012-02-12 22:46:03

回答

1

如果你想提取的值,该值由一到多的数字,这正则表达式应该工作:

preg_match("/a=(\\d{1,})/ui", $_SERVER['REQUEST_URI'], $matches) 

然后使用$matches[1]显示a

+0

我还没有能够得到这个工作,但我能够找到以下解决方案:'preg_match(“/ \?c =(\ w +)\&a =(\ w + )/ i“,$ _SERVER ['REQUEST_URI'],$ matches);'感谢您的帮助... – 2012-02-12 17:18:00

+0

当然,PHP使用上面是:preg_match(”/ a =(\\ d {1,})/ ui“,$ searchText) – 2012-02-12 17:27:42

+0

完美。这工作。是的,在我使用PHP之前,我应该指出这一点。现在一切正常...... t – 2012-02-12 17:31:51

1

我打算回答一个稍微更一般的问题,这是你的建议?您尝试从URI请求字符串中删除特定参数的前缀(会丢弃前导?)。在这种情况下使用mod_rewrite引擎,以便您可以在.htaccess文件中实现此功能。

该规则稍微复杂一些,因为您不一定知道a = XXX的查询参数在哪里,因此您需要不同的正则表达式,其中a是第一个参数,而a是后续参数。您可以通过((?=a=)regexp1|regexp2)这样做,所以在这里它是:

RewriteEngine on 
RewriteBase \ 
RewriteCond %{QUERY_STRING} ^(?(?=a=)a=[^&]*&?(.*)|(.*)&a=[^&]*(&.*)?) 
RewriteRule ^.*    $0?%1%2%3      [L] 

如果是第一次在1%含有休息,否则%2%3的书挡(3%可能为空)。

如果您希望在特定脚本中发生这种情况,请将规则正则表达式^.*替换为更具体的规则。

享受:-)

+0

相同的正则表达式可以在'preg_match()'中工作,但为什么不使用'$ _GET'? – TerryE 2012-02-12 17:37:44

+0

我试着远离.htaccess。我之前尝试过,但没有工作......也许我的系统有问题。我会检查... – 2012-02-12 17:41:52

+0

我注意到你仍然愚蠢我Q为什么编辑$ _SERVER ['REQUEST_URI'],而不是仅仅使用'$ _GET' :-) – TerryE 2012-02-12 17:45:08