正则表达式 - URL中2个字符串之间的数字

时间:2014-10-02 17:34:00

标签: regex

我需要你对RE的帮助:

我的源文字是:tpl?nik=8942467302&regan=

我想只选择这个号码:8942467302

我正在使用正则表达式/(?<=nik=)(.*)&(?=regan)/,它选择8942467302&

我不想要“&amp;”在比赛结束时。如何获得没有尾随“&amp;”的数字?

5 个答案:

答案 0 :(得分:0)

简单地:

(\d+)

没有国界,+贪婪。

答案 1 :(得分:0)

$ echo 'tpl?nik=8942467302&regan=' | egrep -o '[[:digit:]]+' 
8942467302

答案 2 :(得分:0)

我认为你的正则表达式很好看。 如果你确定nik只是数字,你可以使用它:

(?<=nik=)(\d{1,})&(?=regan)

您可以使用此在线工具测试您的正则表达式:
http://regex101.com/

只需复制顶部的正则表达式并将测试字符串放在下面。

答案 3 :(得分:0)

移动“&amp;”前瞻组:

移动&amp;对于前瞻组,您将使其被排除在比赛之外:

s = 'tpl?nik=8942467302&regan=
s[/(?<=nik=)(.*)(?=&regan)/]    # => "8942467302" 

仅提取您想要的组,而不是整个匹配。

如上所述使用String#[]返回整个匹配。通过给它一个组号,你可以让它只返回你感兴趣的组。所以,使用你原来的正则表达式:

s = 'tpl?nik=8942467302&regan='
s[/(?<=nik=)(.*)&(?=regan)/, 1]    # => "8942467302" 

使用URI解析库

由于您是从URI中提取值,因此可以使用Ruby的标准库来提取所需的参数:

require 'cgi'
require 'uri'

s = 'tpl?nik=8942467302&regan='
query = URI(s).query          # => "nik=8942467302&regan="
params = CGI::parse(query)    # => {"nik"=>["8942467302"], "regan"=>[""]}
nik = params["nik"].first     # => "8942467302"

我建议这样做。这是一些代码行,但是在更高的抽象层次上。您可以从有关如何解析URI参数的详细信息中解放代码。

答案 4 :(得分:0)

谢谢大家的帮助! 我使用此代码:/(?<=nik=)([^&]*)(?=&regan)/