2

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

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

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

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

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

在寻找完成第三步的方法时,我想知道是否有一个库可以将 java 正则表达式转换*[^~]Some.Regex[1-9]*为 ruby​​ 等价物/*[^~]Some.Regex[1-9]*/(不确定这是否真的是等价物,但只是为了举例而使用它)。

4

3 回答 3

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的所有标志,因此您需要注意这些标志。支持非捕获组和look-ahead/look-behind和断言:

(?:X) X,作为非捕获组
(?idmsux-idmsux) 无,但将匹配标志 idmsux 打开 - 关闭
(?idmsux-idmsux:X) X,作为具有给定标志 idmsux on - off 的非捕获组
(?=X) X,通过零宽度正前瞻
(?!X) X,通过零宽度负前瞻
(?X) X,作为一个独立的非捕获组
于 2013-03-14T04:39:28.593 回答
0

您应该查看http://txt2re.com/

它将允许您根据您选择的选择生成 REGEX。然后,您可以选择要使用 REGEX 的语言。这将允许您比较 Java 和 Ruby 是如何编写表达式的。这是一个很棒的工具,希望它的主人能长期使用它!

在此处输入图像描述

于 2013-03-14T02:51:28.880 回答
0

我最终制作了一个宝石来支持这一点。github 页面详细介绍了它支持的功能。

于 2013-03-25T09:42:36.137 回答