正则表达式在字符串中获取两个值

时间:2015-10-08 18:37:37

标签: ruby regex

我有以下字符串:

<http://test.host/users?param1=1&param=1>; rel=\"rel_value\"

我想获取URL和rel值。那就是:

http://test.host/users?param1=1&param=1

rel_value

我知道如何获取网址:

string[/<.*?>/]

但未能看到如何获得rel。关于正则表达式的任何想法,我都可以得到它们吗?

3 个答案:

答案 0 :(得分:4)

如果保证字符串具有该格式:

/<(.+)>; rel=\\\"(.+)\\\"/

如此使用:

m = s.match(/<(.+)>; rel=\\\"(.+)\\\"/)
m[0] #=> http://test.host/users?param1=1&param=1
m[1] #=> rel_value

此外,您可以使用两个正则表达式来搜索字符串中的每个内容:

s[/(?<=<).+(?=>)/] #=> http://test.host/users?param1=1&param=1
s[/(?<=rel=\\\").+(?=\\\")/] #=> rel_value

(这些使用lookahead和lookbehind来捕获除值之外的任何东西)。

答案 1 :(得分:1)

当你要求同时使用两者的正则表达式时:

<(.*)>.*rel=\\"(.*)\\"

第一个捕获组包含URL,第二个捕获组包含rel值。但你可以为每个人做一个正则表达式。 对于URL:

<(.*)>

对于rel值:

rel=\\"(.*)\\"

答案 2 :(得分:0)

应该至少有一个非正则表达式解决方案:

str.tr('<>\\\"','').split(';\s+rel=')
  #=> ["http://test.host/users?param1=1&param=1; rel=rel_value"]