我需要你对RE的帮助:
我的源文字是:tpl?nik=8942467302®an=
我想只选择这个号码:8942467302
我正在使用正则表达式/(?<=nik=)(.*)&(?=regan)/
,它选择8942467302&
我不想要“&amp;”在比赛结束时。如何获得没有尾随“&amp;”的数字?
答案 0 :(得分:0)
简单地:
(\d+)
没有国界,+
贪婪。
答案 1 :(得分:0)
$ echo 'tpl?nik=8942467302®an=' | egrep -o '[[:digit:]]+'
8942467302
答案 2 :(得分:0)
我认为你的正则表达式很好看。 如果你确定nik只是数字,你可以使用它:
(?<=nik=)(\d{1,})&(?=regan)
您可以使用此在线工具测试您的正则表达式:
http://regex101.com/
只需复制顶部的正则表达式并将测试字符串放在下面。
答案 3 :(得分:0)
移动&amp;对于前瞻组,您将使其被排除在比赛之外:
s = 'tpl?nik=8942467302®an=
s[/(?<=nik=)(.*)(?=®an)/] # => "8942467302"
如上所述使用String#[]返回整个匹配。通过给它一个组号,你可以让它只返回你感兴趣的组。所以,使用你原来的正则表达式:
s = 'tpl?nik=8942467302®an='
s[/(?<=nik=)(.*)&(?=regan)/, 1] # => "8942467302"
由于您是从URI中提取值,因此可以使用Ruby的标准库来提取所需的参数:
require 'cgi'
require 'uri'
s = 'tpl?nik=8942467302®an='
query = URI(s).query # => "nik=8942467302®an="
params = CGI::parse(query) # => {"nik"=>["8942467302"], "regan"=>[""]}
nik = params["nik"].first # => "8942467302"
我建议这样做。这是一些代码行,但是在更高的抽象层次上。您可以从有关如何解析URI参数的详细信息中解放代码。
答案 4 :(得分:0)
谢谢大家的帮助!
我使用此代码:/(?<=nik=)([^&]*)(?=®an)/