自动将Java正则表达式转换为Ruby正则表达式?
我使用一个工具,其中大量字符串(存储在数据库中)通过一系列Java正则表达式规则进行转换,以使其更具可读性。为了更容易添加新规则,我需要一个UI,显示哪些字符串将受到建议的正则表达式的影响 我有一个学校项目,其中一个要求是它是用RubyonRails完成的,我正在考虑用它来满足我上述的需求 是否有一个现有的库/gem可以将提议的Java风格的regex转换为Ruby regex(以便查找受影响字符串的代码可以是Ruby) 编辑:我想我没有很好地解释我自己。我正在寻找一个gem,它可以将任何给定的Java正则表达式转换为等价的Ruby正则表达式(当然,在一定范围内)。以下是工作流的一个示例:自动将Java正则表达式转换为Ruby正则表达式?,java,ruby-on-rails,ruby,Java,Ruby On Rails,Ruby,我使用一个工具,其中大量字符串(存储在数据库中)通过一系列Java正则表达式规则进行转换,以使其更具可读性。为了更容易添加新规则,我需要一个UI,显示哪些字符串将受到建议的正则表达式的影响 我有一个学校项目,其中一个要求是它是用RubyonRails完成的,我正在考虑用它来满足我上述的需求 是否有一个现有的库/gem可以将提议的Java风格的regex转换为Ruby regex(以便查找受影响字符串的代码可以是Ruby) 编辑:我想我没有很好地解释我自己。我正在寻找一个gem,它可以将任何给定的
*[^~]Some.regex[1-9]*
*[^~]Some.regex[1-9]*
转换为ruby等价物,/*[^~]Some.regex[1-9]*/
(不确定这是否真的是等价物,但只是为了一个示例而使用它)。您应该检查一下
它将允许您根据选择生成正则表达式。然后,您可以选择要在其上使用正则表达式的语言。这将允许您比较Java如何编写表达式和Ruby。这是一个伟大的工具,希望它的主人保持它很长一段时间
如果我没记错的话,Java正则表达式基本上是字符串,传递给一个方法,该方法将它们传递给正则表达式引擎 Ruby的正则表达式也不例外。Ruby有几种创建正则表达式的方法,它们都返回相同的对象,尽管它们的定义不同:
/[^~]Some.Regex[1-9]*/ # => /[^~]Some.Regex[1-9]*/
%r[[^~]Some.Regex[1-9]*] # => /[^~]Some.Regex[1-9]*/
Regexp.new('[^~]Some.Regex[1-9]*') # => /[^~]Some.Regex[1-9]*/
pattern = '[^~]Some.Regex[1-9]*'
/#{ pattern }/ # => /[^~]Some.Regex[1-9]*/
这为您提供了一些灵活性,并允许您将字符串替换为正则表达式或将其传递给regex.new
Ruby并没有Java的所有功能,所以您需要注意这些功能。支持非捕获组、前瞻/后看和断言:
(?:X) X, as a non-capturing group
(?idmsux-idmsux) Nothing, but turns match flags i d m s u x on - off
(?idmsux-idmsux:X) X, as a non-capturing group with the given flags i d m s u x on - off
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?X) X, as an independent, non-capturing group
(?:X)X,作为非捕获组
(?idmsux idmsux)无,但将匹配标志i d m s u x打开-关闭
(?idmsux idmsux:X)X,作为具有给定标志i d m s u X开-关的非捕获组
(?=X)X,通过零宽度正向前瞻
(?!X)X,通过零宽度负前瞻
(?X)X,作为一个独立的非捕获组
我最后制作了一块宝石来支持这一点。提供了支持哪些功能的详细信息。您要转换的正则表达式是什么?例子很重要。请记住,写这样的东西不一定是一件小事。