0

与正则表达式有点纠结,我在一个字符串中有 4 个代码

CODE4:CODE3:CODE2:CODE1

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

所以我可以有 ab:bc:de:fg

或者

公元前::fg

ab:::fg

在上述 CODE1 = fg dnd 的每种情况下,为了我亲爱的生活,我无法计算出 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]*)$)

塔都

4

3 回答 3

4

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

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

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

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

符合你的描述和你给出的几个例子。

于 2008-12-19T11:06:01.823 回答
0

我不确定为什么你必须从右到左匹配代码。只需使用正则表达式来分离字符串:

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

然后你在 4 美元中有 CODE1,在 3 美元中有 CODE2,在 2 美元中有 CODE3,在 1 美元中有 CODE4。

于 2008-12-19T11:07:27.483 回答
0

(CODE1)?:(CODE2)?:(CODE3)?:CODE4会工作 - 如果领先:没关系。否则,如果您不能有前导冒号,请枚举:

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

最右边的部分是强制性的,而最左边的部分不是,这一点并没有什么特别之处。

于 2008-12-19T11:28:12.760 回答