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,但这不是正确的方式®
match = gsub Regexp.new(/.*(regex).*/, '\1')
最佳答案
所以给定一个像这样的字符串:
s = "blah blah param=pancakes|eggs"
您只想提取“煎饼”
,对吗?如果是这样,那么:
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 的评论),因此只需 |
在字符类中就可以了。
关于ruby - 是否可以使这个 ruby 正则表达式代码更短?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048765/