自动将Java正则表达式转换为Ruby正则表达式?

时间:2013-03-14 02:32:24

标签: java ruby-on-rails ruby

我使用一种工具,其中大量字符串(存储在数据库中)被一系列Java正则表达式规则转换为更易于人工阅读。为了更容易添加新规则,我想要一个UI,显示哪些字符串会受到提议的正则表达式的影响。

我有一个学校项目,其中一个要求是使用Ruby on Rails完成并且正在考虑使用它来满足我的上述需求。

是否存在将建议的Java样式正则表达式转换为Ruby正则表达式的现有库/ gem(以便找到受影响的字符串的代码可以是ruby)?

编辑:我想我并没有很好地解释自己。我正在寻找一个将任何给定的Java正则表达式转换为等效的Ruby正则表达式的gem(在当然的限制范围内)。以下是工作流程的示例:

  1. 用户输入Java正则表达式*[^~]Some.Regex[1-9]*
  2. 将java regex字符串发送到rails服务器
  3. rails服务器返回此正则表达式适用的数据库中的字符串列表。
  4. 在研究完成第三步的方法时,我想知道是否有一个库将java正则表达式*[^~]Some.Regex[1-9]*转换为ruby等价物,/*[^~]Some.Regex[1-9]*/(不确定这是否实际上等同于,但只是为了举例而使用它。

3 个答案:

答案 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相比。它是一个很棒的工具,希望它的主人长时间保持它!

enter image description here

答案 2 :(得分:0)

我最终制作了一个支持这个的宝石。 github page详细说明了它支持哪些功能。

相关问题