2013-03-14 135 views
2

我使用了一个工具,其中大量字符串(存储在数据库中)通过一系列Java正则表达式规则进行转换,使其更具人类可读性。为了更容易地添加新规则,我需要一个UI来显示哪些字符串会受到建议的正则表达式的影响。自动将Java正则表达式转换为Ruby正则表达式?

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

是否有一个现有的库/ gem将提议的Java风格的正则表达式转换为Ruby正则表达式(以便发现受影响的字符串的代码可以在ruby中)?

编辑:我想我没有解释得很好。我正在寻找一种将任何给定的Java正则表达式转换为等价的Ruby正则表达式的gem(在当然范围内)。这里的工作流程的例子:

  1. 用户进入Java的正则表达式,*[^~]Some.Regex[1-9]*
  2. 的java的正则表达式的字符串被发送到轨道服务器
  3. Rails服务器从数据库中,这个正则表达式返回一个字符串列表适用于。

在寻找方法来完成第三步,我在想,如果有,将java的正则表达式*[^~]Some.Regex[1-9]*转换为红宝石等同,/*[^~]Some.Regex[1-9]*/(库不知道这实际上是等价的,但只是用它为了举例)。

+1

什么是您想要转换的正则表达式?例子很重要。请记住,写[Rubular](http://rubular.com/)这样的东西并不一定是一件小事。 – tadman

回答

0

我最终使宝石来支持这一点。 github page详细说明了它支持的功能。

0

你应该看看http://txt2re.com/

它可以让你基于您选择的选项中选择正则表达式。然后,您可以选择您希望使用REGEX的语言。这将允许您比较Java如何写入Ruby表达式。这是一个伟大的工具,并希望它的主人保持了很长一段时间!

enter image description here

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 
相关问题