【问题标题】:Conditional capturing in java regexjava 正则表达式中的条件捕获
【发布时间】:2016-07-06 09:39:14
【问题描述】:

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

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

string1CONST1:CONST2:CONST3:value

string2CONST1:CONST2:CONST4:value-12345

对于 string1 这个模式可以做

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

我捕获第二组的地方。但是我还需要处理“值”后面跟着破折号和其他一些值的情况。 我是这样尝试的:

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

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

谁能指出我应该向哪个方向寻找解决方案?我应该深入研究前瞻和后视还是有更简单的解决方案?

提前致谢。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    不要使用

    (.*),但是

    ([^\-]*)

    避免 - 结果。

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

    【讨论】:

      【解决方案2】:
      ^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

      【讨论】:

        猜你喜欢
        • 2013-07-31
        • 1970-01-01
        • 2018-07-11
        • 2014-08-17
        • 2011-04-10
        • 1970-01-01
        • 2014-01-02
        • 2013-05-07
        • 2011-10-19
        相关资源
        最近更新 更多