如何使用正则表达式提取参数值,例如此字符串中的 mver 参数:
"/maze/action.xml?mver=66381&cid=474&melu=0&osName=Windows%208&dbv=38&ucnt=19"
我想使用提取 mver 参数
mver\=(.*?)\&
即使它是最后一个参数,我怎样才能让它捕获它(没有尾随 & 符号)
谢谢
如何使用正则表达式提取参数值,例如此字符串中的 mver 参数:
"/maze/action.xml?mver=66381&cid=474&melu=0&osName=Windows%208&dbv=38&ucnt=19"
我想使用提取 mver 参数
mver\=(.*?)\&
即使它是最后一个参数,我怎样才能让它捕获它(没有尾随 & 符号)
谢谢
这是一个简单的方法 -
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
这个例子。
这是一个正则表达式:如果您想同时捕获参数和值。
mver=(((?!&).)*)
只为价值。
(?<=mver=)(((?!&).)*)
如果您使用的是 Ruby 2 并且参数都是数字,那么您只需要这个简短的正则表达式:
mver=\K\d+
(不需要捕获组,正则表达式直接匹配数字)。
如果参数可以包含数字以外的其他字符,则可以使用以下变体:
mver=\K\[^&]+
见在线演示
它是如何工作的?
mver=
\K
告诉引擎删除到目前为止我们匹配的内容,即mver=
从将返回的字符串中删除