我需要你的幫助,RE:正則表達式 - 在URL字符串2之間數
我的原文是:tpl?nik=8942467302®an=
我想只選擇這個號碼:8942467302
我使用正則表達式/(?<=nik=)(.*)&(?=regan)/
,它選擇8942467302&
我不希望在比賽結束時「&」。我怎樣才能得到沒有尾隨「&」的號碼?
我需要你的幫助,RE:正則表達式 - 在URL字符串2之間數
我的原文是:tpl?nik=8942467302®an=
我想只選擇這個號碼:8942467302
我使用正則表達式/(?<=nik=)(.*)&(?=regan)/
,它選擇8942467302&
我不希望在比賽結束時「&」。我怎樣才能得到沒有尾隨「&」的號碼?
我認爲你的正則表達式看起來不錯。 如果你確信NIK只是個數字,你可以這樣做:
(?<=nik=)(\d{1,})&(?=regan)
你可以使用這個在線工具來測試您的正則表達式:
http://regex101.com/
就在正則表達式在頂部複製,並把您的測試以下字符串。
簡單:
(\d+)
沒有國界的,+
是貪婪。
$ echo 'tpl?nik=8942467302®an=' | egrep -o '[[:digit:]]+'
8942467302
通過移動&以超前組,將導致其從比賽被排除:
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參數的詳細信息中釋放代碼。
謝謝大家的幫助!我使用這段代碼:/(?<=nik=)([^&]*)(?=®an)/
make'。*'ungreedy'。*?'或者像這樣使用'/(?<= nik =)([^&] *)(?=&regan)/' – sln 2014-10-02 17:51:36
你使用的是什麼正則表達式平臺/工具? – anubhava 2014-10-02 17:52:28
將「&」移到預見範圍內會將其從整體匹配中排除,因爲您沒有消費任何東西,但仍保留標準。 – sln 2014-10-02 17:56:43