2016-07-06 49 views
0

我试图找出如何写下面的正则表达式:条件捕获

假设我可以有两种类型的字符串来检查,找到“值”:

字符串1CONST1:CONST2:CONST3:value

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

对于STRING1这种模式会做

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

其中我捕获第二组。但我还需要处理“价值”后面跟着短划线和其他一些值的情况。 我试着这样说:

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

但随后第二组(.*)将捕获字符串2一切,包括以下破折号+值2(12345)。使它(.*?)也不会工作,因为string1组2将返回空字符串。

任何人都可以指出我应该寻找什么方向来寻找解决方案吗?我应该深入了解前瞻还是后顾之处,或者有更简单的解决方案?

在此先感谢。

回答

1

不要使用

,但

([^ \ - ] *)(*)

避免 - 在结果中。

避免这个点通常会更好。但给出允许的字符的正面或负面的列表。

+0

谢谢你,为我工作。 – dty

1
^CONST1:CONST2:(CONST3|CONST4):([^\-\W]*)(-[^\W]+)? 

实施例:

https://regex101.com/r/vL4uG2/2

我测试与后续文本的正则表达式:

CONST1:CONST2:CONST3:HOLA

CONST1:CONST2:CONST3: hola-43

CONST1:CONST2:CONST4:HOLA

CONST1:CONST2:CONST4:HOLA-12345

+0

这也可以,谢谢。 – dty