java正则表达式中的条件捕获

时间:2016-07-06 09:39:14

标签: java regex

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

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

string1 ((Task)task).ContinueWith(t => { var resultProperty = t.GetType().GetProperty("Result"); var resultObject = resultProperty.GetValue(t); Console.WriteLine("The result is " + resultObject); });

string2 CONST1:CONST2:CONST3:value

对于 string1 ,此模式可以

CONST1:CONST2:CONST4:value-12345

我抓住了第二组。但是我还需要处理“值”后跟破折号和其他值的情况。 我这样试过:

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

但是第二组CONST1:CONST2:(CONST3|CONST4):(.*)(-.*)? 将捕获 string2 中的所有内容,包括以下dash + value2(12345)。使它(.*)也不起作用,因为string1 group2将返回空String。

有人能指出我应该朝哪个方向寻找解决方案吗?我应该深入了解前瞻,还是有一个更简单的解决方案?

提前致谢。

2 个答案:

答案 0 :(得分:1)

不要使用

(。*),但

([^ \ - ] *)

要避免 - 在结果中。

通常最好避免使用圆点。但是给出允许字符的正面或负面列表。

答案 1 :(得分: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