2010-09-10 126 views
4

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

但是,http://www.regular-expressions.info/conditional.html表明Java不支持条件,但是我看过SO上的其他帖子暗示它的确如此。

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

应该符合以下任一输入:317866317866A12或​​

如何解决这个Java的限制?

TIA

+0

它应该与“31786”匹配吗?如果不是,那么最后6点之后呢? – 2010-09-10 20:42:52

回答

5

条件表达式不被java.util.regex.Pattern类支持。 为了解决这个问题,你可以使用第三方的正则表达式库,例如JRegex

1

这样做呢?

 
(?:[a-zA-Z0-9]{6})?(317866?) 

或者,如果你知道的更长的版本总是以字母开头,那么你可以使用这个:

 
(?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?) 

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

+0

感谢您的快速回复......我并不真正熟悉RegEx,我没有意识到它可能很简单。我的商业规则是:如果以alpha开头,则忽略前6个,如果它以数字开头,则从头开始匹配。所以,第二个例子似乎更完整。 – RNeuendorff 2010-09-10 20:16:49

+0

@RNeuendorff:第二个示例应该可以工作,它不会匹配第一个表达式匹配的“123456316866”。我想你想要第二个例子。 – 2010-09-10 20:20:19

+0

@Mark Byers:这个正则表达式并不完全准确。我不想匹配诸如“AB1363183A23”之类的东西,但该正则表达式的确如此。 – RNeuendorff 2010-09-10 20:28:09