0

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

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

匹配到?

一些示例将有很大帮助。

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

谢谢。

4

2 回答 2

1

看那[^,]基本上说,在 = ( =(?! )) 匹配任何没有 a,的东西之后。

正则表达式并不是很优雅:

甚至类似的东西ABC也会匹配。类似的东西ABC: X=1Y=1也会匹配。我会说,不要使用它并为你需要的东西组装一个合适的正则表达式。

于 2011-05-13T14:48:59.433 回答
0

你说:

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

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

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

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

为了说明为什么这很重要,如果在此示例中允许使用逗号,则会对结束值的位置产生歧义Y,因为逗号已用于显示值的结束,X而是使用逗号点的Y可能使计算机认为 的值Y1,这是不正确的。

于 2011-05-13T14:53:47.323 回答