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?))
它应匹配以下任一输入: 317866
或317866A12
或FCF1CS317866
我如何解决这个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。