0

如何使用正则表达式提取参数值,例如此字符串中的 mver 参数:

"/maze/action.xml?mver=66381&cid=474&melu=0&osName=Windows%208&dbv=38&ucnt=19"

我想使用提取 mver 参数

mver\=(.*?)\&

即使它是最后一个参数,我怎样才能让它捕获它(没有尾随 & 符号)

谢谢

4

3 回答 3

4

这是一个简单的方法 -

2.1.0 :001 > require 'uri'
 => true 
2.1.0 :002 > uri = URI("/maze/action.xml?mver=66381&cid=474&melu=0&osName=Windows%208&dbv=38&ucnt=19")
 => #<URI::Generic:0x00000103011c98 URL:/maze/action.xml?mver=66381&cid=474&melu=0&osName=Windows%208&dbv=38&ucnt=19> 
2.1.0 :003 > require 'cgi'
 => true 
2.1.0 :004 > CGI::parse(uri.query)
 => {"mver"=>["66381"], "cid"=>["474"], "melu"=>["0"], "osName"=>["Windows 8"], "dbv"=>["38"], "ucnt"=>["19"]} 
2.1.0 :005 > CGI::parse(uri.query)['mver']
 => ["66381"] 
2.1.0 :006 > 

看看CGI::parse这个例子

于 2014-05-29T10:19:30.900 回答
0

这是一个正则表达式:如果您想同时捕获参数和值。

mver=(((?!&).)*) 

只为价值。

(?<=mver=)(((?!&).)*)
于 2014-05-29T10:24:52.947 回答
0

如果您使用的是 Ruby 2 并且参数都是数字,那么您只需要这个简短的正则表达式:

mver=\K\d+

(不需要捕获组,正则表达式直接匹配数字)。

如果参数可以包含数字以外的其他字符,则可以使用以下变体:

mver=\K\[^&]+

见在线演示

它是如何工作的?

  1. 我们匹配字面量mver=
  2. \K告诉引擎删除到目前为止我们匹配的内容,即mver=从将返回的字符串中删除
  3. 我们匹配任意数量的数字。这些数字将是要返回的最终匹配。
于 2014-05-29T10:20:18.873 回答