【发布时间】:2012-04-26 15:39:30
【问题描述】:
我是 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 中有没有办法在正则表达式中引用以前匹配的组?
【问题讨论】:
-
你试过
Pattern.compile("^\\s*((\\w\\d\\d\\d)(\\s+\\2)*)?$")我认为反向引用是 \N 其中 N 是你的组。尽管您必须使用\\N反斜杠 -
是的,我有,它将 \\2 作为文字数字 2(我忘记在原始帖子中使用双反斜杠,但这就是我的意思)。