【问题标题】:Ruby regex for matching simpliest Ruby's regexes用于匹配最简单 Ruby 正则表达式的 Ruby 正则表达式
【发布时间】:2010-11-17 16:43:47
【问题描述】:

我想在 Ruby 脚本的文本中匹配正则表达式(至少是基本的,不是所有可能的类型......暂时......)。
有点像……\/\^? oh my god... \$?\/[eimnosux]*

也许我在这里需要递归正则表达式。

【问题讨论】:

  • 我仍然对此持怀疑态度。例如,即使是像“hello world”这样的简单字符串也可以用作正则表达式模式。您是否要求某种启发式方法?
  • @alpha-mouse, \/\^? \$?\/[eimnosux]* 是我想要的基本示例。我想匹配正则表达式,以最简单的形式放置在 Ruby 源代码中:/....../。不是%r{}Regex.new(str)
  • 您需要为此实际解析 Ruby。想想这行代码:x = foo/bar*str[/foo/,1].to_i 如果没有根据语法实际解析 Ruby 代码,你无法知道第一个斜杠是否应该开始一个正则表达式。
  • @Phrogz,我知道,我正在解析 Ruby 代码。我正在尝试使用正则表达式来解析它,而不是迭代的逐字符读取算法。在您的示例中,我的解析器的另一部分看到,正则表达式不能紧跟在 foo 之后,而 / 是一种方法。
  • @Nakilon 我很好奇你的解析器是怎么看的。 foo / bar 是有效除法,foo /bar/ 是通过正则表达式作为参数的有效方法调用。

标签: ruby regex recursive-regex


【解决方案1】:

正如我在上面所评论的,您需要解析 Ruby 以区分除斜杠和正则表达式分隔符。但是对于最简单、最简单的情况,不用担心这个,如何:

regex_match = %r{/(?:[^/\\]|\\.)+/[mgixo]*}

那是“一个正斜杠,后跟一个或多个不是正斜杠或反斜杠的东西,或者是反斜杠后跟其他东西,最后是斜杠,可能还有一些正则表达式标志。”

【讨论】:

  • 看起来不错。需要测试。我认为它需要使用命名组进行递归。