我有一个条件正则表达式,适用于regex测试网站,例如regexlib.com,但无法让它在我的Java应用程序中运行。
但是,http://www.regular-expressions.info/conditional.html表示Java不支持条件,但我看到SO上的其他帖子暗示它确实存在。
我的RegEx的一个例子是:(?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?))
它应匹配以下任一输入:317866
或317866A12
或FCF1CS317866
如何解决此Java限制?
TIA
答案 0 :(得分:6)
java.util.regex.Pattern类不支持条件表达式。 要解决这个问题,您可以使用第三方正则表达式库,例如JRegex
答案 1 :(得分:1)
这样做呢?
(?:[a-zA-Z0-9]{6})?(317866?)
或者如果你知道较长的版本总是以字母开头,那么你可以使用它:
(?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?)
它将首先尝试匹配6个字母数字,然后是31786或317866,如果失败,它将回溯并尝试匹配31786或317866。