代码之家  ›  专栏  ›  技术社区  ›  spacemonkeys

从右到左的正则表达式和匹配代码

  •  0
  • spacemonkeys  · 技术社区  · 17 年前

    我和regex有点纠结,一个字符串中有4个代码

    代码4:代码3:代码2:代码1

    除代码1外,每个代码都是可选的

    所以我可以得到ab:bc:de:fg

    或

    BC::FG

    属于

    A::FG

    在上面的每一个例子中,code1=fg dnd对于我亲爱的生命来说,我无法计算出regex

    作为一个标准的字符串解析很容易,但不幸的是,由于中的business对象需要通过regex执行:-(并通过vb.net regex.matche、groups(“code1”)fg返回(我希望这是有意义的)

    事先谢谢你的帮助

    结果是有点雷吉士做的工作,有点混乱,但它工作。

    (^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)
    

    TA都

    3 回复  |  直到 14 年前
        1
  •  4
  •   Gareth    17 年前

    这里不需要使用正则表达式。

    我不知道您使用的是什么语言,但是将“:”上的字符串拆分,您将得到一组代码。

    如果您真的只是想验证一个字符串是否对此有效,那么

    /(\w*:){0,3}\w+/
    

    匹配您的描述和您给出的几个示例。

        2
  •  0
  •   Avi    17 年前

    我不知道你为什么要把代码从右向左匹配。只需使用正则表达式来分离字符串:

    /(.*):(.*):(.*):(.+)/
    

    然后你有4美元的代码1,3美元的代码2,2美元的代码3,1美元的代码4。

        3
  •  0
  •   Siddharth Rout    14 年前

    (CODE1)?:(CODE2)?:(CODE3)?:CODE4 会有用的-如果领导:没关系。否则,如果没有前导冒号,请枚举:

    (CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4

    事实上,最右边的部分是强制性的,而最左边的部分不是强制性的。