regex = Regexp.new(/param\s*=\s*([^\|]*)/)
regex.match(text).to_s
link = $1
link.strip!
特别是这样的代码:
regex = Regexp.new(/regex/)
regex.match(text).to_s
match = $1
我甚至尝试过滥用gsub,但它不是TheRightWay®
match = gsub Regexp.new(/.*(regex).*/, '\1')
答案 0 :(得分:2)
所以给出一个像这样的字符串:
s = "blah blah param=pancakes|eggs"
你想只提取"pancakes"
,对吗?如果是,那么:
you_want = s[/param\s*=\s*([^|]+)/, 1]
\s*
将占用任何领先的空白,因此不需要strip!
的一半。如果您根本不想在提取的值中包含任何空格,那么:
you_want = s[/param\s*=\s*([^|\s]+)/, 1]
如果您只想删除尾随空格,请添加rstrip
:
you_want = s[/param\s*=\s*([^|]*)/, 1].rstrip
如果s
不是你的正则表达式,那么这个会抛出异常。
有关详细信息,请参阅String#[]
。
我还将您的[]*
更改为[]+
,以避免任何匹配。此外,您不必转义字符类中的大多数元字符(请参阅Tim的注释),因此只需|
在字符类中就可以了。
答案 1 :(得分:1)
text =~ /param\s*=\s*([^|]*)/
match = $~[1]
从输入字符串text
获取捕获组编号1的内容到变量match
。