正则表达问题

时间:2011-05-13 14:42:55

标签: .net regex regexbuddy

在.NET 4.0中,reg ex是什么,

"^ABC(: ([^=]+(?<! )=(?! )[^,]+(?<! )(,(?! )|$))+)?$"

匹配?

一些示例示例会有很大帮助。

我对以下结果感到非常惊讶。 上述表达式匹配“ABC:X = 12,Y = 1.79769313486232E + 308”。但它失败了“ABC:X = 12,Y = 1,79769313486232E + 308”。唯一的区别是双号的十进制符号。

感谢。

2 个答案:

答案 0 :(得分:1)

查看[^,],它基本上表示在=(=(?! ))之后匹配任何没有,的内容。

正则表达式并不优雅:

即使像ABC这样的东西也会匹配。像ABC: X=1Y=1这样的东西也会匹配。我会说,不要使用它并为你需要的东西组装一个正确的正则表达式。

答案 1 :(得分:0)

你说:

  

上面的表达式匹配,ABC:X = 12,Y = 1.79769313486232E + 308“。但它失败了”ABC:X = 12,Y = 1,79769313486232E + 308“

没有任何上下文,我不确定匹配上述字符串的目的是什么,但我可以看出为什么匹配第一个而不是第二个字段是完全合法的。

1.79769313486232E+308的格式是一个非常大的数字的科学记数法(+308基本上意味着将小数点向右移动308个位置)。这是带点的合法数字,但不是逗号。

确实有些语言环境可能使用逗号作为十进制字符而不是点,但科学记数法是标准化使用点,编程语言和其他使用此格式数字的计算机应用程序也是如此,因此它将其强制为点并防止使用逗号是合法的。

为了证明这一点很重要,如果在这个例子中允许逗号,那么就会产生关于Y的值结束的模糊性,因为逗号已经被用来显示结束X的值,使用逗号代替Y中的点可能会使计算机认为Y的值为1,这是不正确的。