使用预定的Pattern对象构造Pattern对象

时间:2014-05-08 03:33:48

标签: java regex constructor

我第一次使用Pattern类作为Uni赋值的一部分,我们必须在其中创建解析器和解释器。这就是我目前使用以下方式定义模式的方式:

    private static Pattern OPENBRACE = Pattern.compile("\\{");
private static Pattern CLOSEBRACE = Pattern.compile("\\}");

private static Pattern blockPat = Pattern.compile("OPENBRACE [stmtPat]+ CLOSEBRACE");
private static Pattern loopPat = Pattern.compile("loop blockPat");
private static Pattern actPat = Pattern.compile("move | turnL | turnR | takeFuel |      wait");
private static Pattern stmtPat = Pattern.compile("actPat; | loopPat");
private static Pattern progPat = Pattern.compile("[stmtPat]*");

正如您所看到的,我正在尝试创建由预定Pattern对象定义的新Pattern对象。

目前,Java正在处理输入" .compile(" ....")"作为字符串文字而不识别变量名称。有没有什么方法可以按我想要的方式定义模式?或者我是否必须在每个模式应该搜索的词典字符串上定义每个模式?

1 个答案:

答案 0 :(得分:0)

编译正则表达式不仅仅是识别关键字符,它还包括整个正则表达式需要运行的计划。前瞻,捕捉等等。它不只是制作一个字符串。 只需拥有一个用于OPENBRACE的String,并将其连接到其他模式中,即可获得最佳服务。

从Java 6源代码可以看出,编译模式有很多工作要做。它不接受嵌套模式。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/regex/Pattern.java#Pattern.compile%28%29

编辑:此外,新模式无法知道引用OPENBRACE模式,因为您将该名称用作文字,而不是参考。

之间存在巨大差异
"OPENBRACE" // a string

OPENBRACE // a variable reference