是否可以缩短这个ruby正则表达式代码?

时间:2011-08-13 05:24:44

标签: ruby regex

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')

2 个答案:

答案 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