我正在编写一个工具来帮助学生学习正则表达式。我可能会用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 类吗?