我是 Android 编码的新手,但我有使用 Perl 正则表达式的经验。我需要将 0 个或多个标识符的列表与正则表达式匹配,例如:
^\s*((\w\d\d\d)(\s+$2)*)?$
注意 $2 指的是前一个匹配组 (\w\d\d\d) 对于 android 代码,它看起来像:
Pattern.compile("^\\s*((\\w\\d\\d\\d)(\\s+\$2)*)?$")
Eclipse 编译器不编译 \$2,我也试过 \2,它编译但试图匹配文字数字 2。
蛮力解决方案是重复标识符模式:
Pattern.compile("^\\s*((\\w\\d\\d\\d)(\\s+(\\w\\d\\d\\d))*)?$")
它可以工作,但有以下缺点: * 在任何重复中都容易产生语法错误 * 随着标识符变得更加复杂,字符串变得大 * 它不优雅 * 如果您需要不引用,则变得更加复杂一场但几场之前的比赛
Java中有没有办法在正则表达式中引用以前匹配的组?