1

我正在编写一个工具来帮助学生学习正则表达式。我可能会用Java编写它。

想法是这样的:学生输入正则表达式,该工具显示文本的哪些部分将被正则表达式匹配。很简单。

但我想支持几种不同的正则表达式“口味”,例如:

  • 基本正则表达式(想想:grep)
  • 扩展正则表达式(想想:egrep)
  • Perl 正则表达式的子集,包括字符类 \w、\s 等。
  • sed 风格的正则表达式

Java 有 java.util.Regex 类,但它只支持 Perl 风格的正则表达式,它是基本和扩展 RE 的超集。我认为我需要的是一种方法来获取任何给定的正则表达式并转义不属于给定风味的元字符。然后我可以将它提供给 Regex 对象,它的行为就好像它是为选定的 RE 解释器编写的一样。

例如,给定以下正则表达式:

^\w+[0-9]{5}-(\d{4})?$

作为一个基本的正则表达式,它会被解释为:

^\\w\+[0-9]\{5\}-\(\\d\{4\}\)\?$

作为扩展的正则表达式,它将是:

^\\w+[0-9]{5}-(\\d{4})?$

作为 Perl 风格的正则表达式,它与原始表达式相同。

是否有“正则表达式的正则表达式”比我可以通过正则表达式搜索和替换来引用非元字符?我还能做什么?我可以使用其他 Java 类吗?

4

5 回答 5

1

我写过类似的东西:是否有正则表达式来检测有效的正则表达式?

您可以参与该表达式,并分别匹配每个标记:

[^?+*{}()[\]\\]                # literal characters
\\[A-Za-z]                     # Character classes
\\\d+                          # Back references
\\\W                           # Escaped characters
\[\^?(?:\\.|[^\\])+?\]         # Character classs
\((?:\?[:=!>]|\?<[=!])?        # Beginning of a group
\)                             # End of a group
(?:[?+*]|\{\d+(?:,\d*)?\})\??  # Repetition
\|                             # Alternation

对于每场比赛,您可以在目标风味中拥有一些适当替换的字典。

于 2008-10-22T21:31:53.377 回答
1

如果您的目标是一个 Unix / Linux 系统,为什么只针对每个正则表达式的最终主机?即,对 BRE 使用 grep,对 ERE 使用 egrep,对 PCRE 使用 perl,等等?您的模块唯一需要做的就是 UI。我见过的大多数正则表达式测试器(体面的)都使用这种方法的变体。

如果您想要另一个库建议,请查看TRE的 BRE / ERE / POSIX / AWK 部分。它不支持反向引用,所以 PCRE / Python / Ruby / JS / Java 已经出局了……

于 2010-05-13T17:15:02.360 回答
1

查看这篇文章以获取“正则表达式的正则表达式”:是否有正则表达式来检测有效的正则表达式?

您可以将其用作模块的基础。

于 2008-10-22T21:20:04.290 回答
1

或者,您可以使用Jakarta ORO吗?

这支持以下正则表达式“风味”:

  • Perl5 兼容的正则表达式
  • 类似 AWK 的正则表达式
  • 全局表达式
于 2008-10-22T21:01:58.040 回答
0

如果你想让你的学生学习正则表达式,为什么不使用一个免费的工具——正则表达式教练——http: //www.weitz.de/regex-coach/在网上学习和评估正则表达式非常好?

在类似问题上查看此 SO 线程 - https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world

BR,
~A

于 2008-10-22T21:56:32.377 回答