我对another question I asked的答案不适用于Java,因为它不支持条件参考功能。
由于答案在正则表达式的一般意义上是正确的,我想得到一个更具体的问题,即如何在没有条件参考特征的情况下做同样的事情。
(?i)^(?:(\[a-z\]+)|\d+)-(?(1)\[a-z\]+|\d+)$
我已经进行了广泛的搜索,并尝试修改它以在Java中以相同的方式工作但没有成功。
答案 0 :(得分:3)
如果我理解正确,您需要确保xx-yy
属于同一类别(字母,数字)。如果他们在第1组中放置xx
,在第2组放置yy
。
如果确实如此,那么您可以使用look-ahead来测试字符串是否为您要接受的形式,然后将每个部分放在不同的组中。
这应该做你想要的:
(?i)^(?=[a-z]+-[a-z]+$|\d+-\d+$)([a-z\d]+)-([a-z\d]+)$
简短说明
^(?=[a-z]+-[a-z]+$|\d+-\d+$)
这个前瞻测试是否整个字符串都在形式中
alpha-alpha
numeric-numeric
([a-z\d]+)-([a-z\d]+)$
如果以前通过预测执行的是肯定的,我们可以放置匹配的字符(无论它们是a-z
还是\d
- 这是之前测试过的)到第1组和第1组2。