Java中的条件正则表达式?

我有一个条件正则表达式,适用于regex测试网站,如regexlib.com,但无法让它在我的Java应用程序中工作。

但是, http://www.regular-expressions.info/conditional.html表明Java不支持条件,但我看到SO上的其他post暗示它确实存在。

我的RegEx的一个例子是: (?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?))

它应匹配以下任一输入: 317866317866A12FCF1CS317866

我如何解决这个Java限制?

TIA

java.util.regex.Pattern类不支持条件表达式。 要解决这个问题,您可以使用第三方regexp库,例如JRegex

那么这样做呢?

 (?:[A-ZA-Z0-9] {6})?(?317866)

或者,如果您知道较长的版本始终以字母开头,那么您可以使用:

 (?:[A-ZA-Z] [A-ZA-Z0-9] {5})?(?317866)

它将首先尝试匹配6个字母数字,然后是31786或317866,如果失败,它将回溯并尝试匹配31786或317866。