我有以下字符串:
<http://test.host/users?param1=1¶m=1>; rel=\"rel_value\"
我想获取URL和rel值。那就是:
http://test.host/users?param1=1¶m=1
和
rel_value
我知道如何获取网址:
string[/<.*?>/]
但未能看到如何获得rel。关于正则表达式的任何想法,我都可以得到它们吗?
答案 0 :(得分:4)
如果保证字符串具有该格式:
/<(.+)>; rel=\\\"(.+)\\\"/
如此使用:
m = s.match(/<(.+)>; rel=\\\"(.+)\\\"/)
m[0] #=> http://test.host/users?param1=1¶m=1
m[1] #=> rel_value
此外,您可以使用两个正则表达式来搜索字符串中的每个内容:
s[/(?<=<).+(?=>)/] #=> http://test.host/users?param1=1¶m=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¶m=1; rel=rel_value"]