ruby - 是否可以使这个 ruby​​ 正则表达式代码更短?

标签 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,但这不是正确的方式®

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/

相关文章:

java - 用于在 Java 中检查带下划线的字符串名称的正则表达式

ruby - 在 Ruby 中调用包含类的方法

ruby-on-rails - 如何将 Rails 模型导出到 json 模式?

ruby-on-rails - 按父 ID 对记录进行分组

java - java(android)中的正则表达式可防止除一个之外的其他网址

此正则表达式模式的 C# 等效项

Ruby SOAP SSL 问题

ruby-on-rails - Rails 5 - 带路由的嵌套 Controller

php - 查询字段包含任意顺序的给定文本字符串的表

php - 允许在字符串中使用破折号但不允许多个连续的破折号