我试图弄清楚如何编写以下正则表达式:

假设我可以使用两种类型的字符串来检查和查找“值”:

字符串1:CONST1:CONST2:CONST3:value

字串2:CONST1:CONST2:CONST4:value-12345

对于string1,此模式可以

CONST1:CONST2:(CONST3|CONST4):(.*)


在这里我捕获了第二组。但是,当“值”后跟破折号和其他一些值时,我还需要处理这种情况。
我这样尝试过:

CONST1:CONST2:(CONST3|CONST4):(.*)(-.*)?


但是第二组(.*)将捕获string2中的所有内容,包括以下破折号+ value2(12345)。将其设置为(.*?)也不起作用,因为string1 group2将返回空的String。

谁能指出我应该朝哪个方向寻找解决方案?我应该深入研究,还是有一个更简单的解决方案?

提前致谢。

最佳答案

不要使用

(。*),但

([^ \-] *)

避免-结果。

通常最好避开圆点。但给出允许的字符的肯定或否定列表。

关于java - Java正则表达式中的条件捕获,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38220836/

10-10 20:00