我使用一种工具,其中大量字符串(存储在数据库中)被一系列Java正则表达式规则转换为更易于人工阅读。为了更容易添加新规则,我想要一个UI,显示哪些字符串会受到提议的正则表达式的影响。
我有一个学校项目,其中一个要求是使用Ruby on Rails完成并且正在考虑使用它来满足我的上述需求。
是否存在将建议的Java样式正则表达式转换为Ruby正则表达式的现有库/ gem(以便找到受影响的字符串的代码可以是ruby)?
编辑:我想我并没有很好地解释自己。我正在寻找一个将任何给定的Java正则表达式转换为等效的Ruby正则表达式的gem(在当然的限制范围内)。以下是工作流程的示例:
*[^~]Some.Regex[1-9]*
在研究完成第三步的方法时,我想知道是否有一个库将java正则表达式*[^~]Some.Regex[1-9]*
转换为ruby等价物,/*[^~]Some.Regex[1-9]*/
(不确定这是否实际上等同于,但只是为了举例而使用它。
答案 0 :(得分:2)
如果我没记错的话,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所有的the flags,所以你需要注意那些。支持非捕获组和前瞻/后视和断言:
(?: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
答案 1 :(得分:0)
您应该查看http://txt2re.com/
它允许您根据您选择的选项生成REGEX。然后,您可以选择要使用REGEX的语言。这将允许您比较Java如何编写表达式与Ruby相比。它是一个很棒的工具,希望它的主人长时间保持它!
答案 2 :(得分:0)
我最终制作了一个支持这个的宝石。 github page详细说明了它支持哪些功能。