Java中的条件正则表达式?
我有一个条件正则表达式,它可以在regex测试网站(如regexlib.com)上运行,但无法在Java应用程序中运行 但是,表示Java不支持条件语句,但我在其他文章中也看到过这样的暗示 我的正则表达式的一个例子是:Java中的条件正则表达式?,java,regex,conditional,Java,Regex,Conditional,我有一个条件正则表达式,它可以在regex测试网站(如regexlib.com)上运行,但无法在Java应用程序中运行 但是,表示Java不支持条件语句,但我在其他文章中也看到过这样的暗示 我的正则表达式的一个例子是:(?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?) 它应该匹配以下任一输入:317866或317866A12或FCF1CS317866 如何克服这个Java限制 类不支持TIA条件表达式。 为了解决这个问题,您可以使用第三方regexp库,例
(?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?)
它应该匹配以下任一输入:317866
或317866A12
或FCF1CS317866
如何克服这个Java限制
类不支持TIA条件表达式。
为了解决这个问题,您可以使用第三方regexp库,例如来代替它,怎么样 (?:[a-zA-Z0-9]{6})?(317866?) (?:[a-zA-Z0-9]{6})?(317866?) 或者,如果您知道较长的版本总是以字母开头,那么您可以使用: (?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?) (?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?)
它将首先尝试匹配6个字母数字,然后再匹配31786或317866,如果匹配失败,它将返回并尝试匹配31786或317866。感谢您的快速回复。。。我对正则表达式不太熟悉,也没想到它会这么简单。我的业务规则是:如果以字母开头,则忽略前6个,如果以数字开头,则从头开始匹配。因此,第二个示例似乎更完整。@RNeuendorff:第二个示例应该可以工作,但与第一个表达式匹配的
123456316866
不匹配。我想你想要第二个例子。@markbyers:这个正则表达式并不完全准确。我不想匹配像“AB1363183A23”这样的东西,但那个正则表达式确实匹配。@RNeuendorff:你确定吗?您作为示例给出的字符串甚至不包含31786
,因此它如何匹配?@rneendorff:最好的测试是编写一个简短的Java程序来测试它们。它只需要大约3或4行代码。它是否应该匹配31786
?如果没有,在最后6次之后,?
在做什么?