在 .NET 4.0 中,reg ex 是什么,
"^ABC(: ([^=]+(?<! )=(?! )[^,]+(?<! )(,(?! )|$))+)?$"
匹配到?
一些示例将有很大帮助。
我对以下结果感到非常惊讶。上述表达式匹配“ABC:X=12,Y=1.79769313486232E+308”。但是对于“ABC:X=12,Y=1,79769313486232E+308”它失败了。唯一的区别是双精度数的十进制符号。
谢谢。
在 .NET 4.0 中,reg ex 是什么,
"^ABC(: ([^=]+(?<! )=(?! )[^,]+(?<! )(,(?! )|$))+)?$"
匹配到?
一些示例将有很大帮助。
我对以下结果感到非常惊讶。上述表达式匹配“ABC:X=12,Y=1.79769313486232E+308”。但是对于“ABC:X=12,Y=1,79769313486232E+308”它失败了。唯一的区别是双精度数的十进制符号。
谢谢。
看那[^,]
基本上说,在 = ( =(?! )
) 匹配任何没有 a,
的东西之后。
正则表达式并不是很优雅:
甚至类似的东西ABC
也会匹配。类似的东西ABC: X=1Y=1
也会匹配。我会说,不要使用它并为你需要的东西组装一个合适的正则表达式。
你说:
上面的表达式匹配,ABC: X=12,Y=1.79769313486232E+308"。但它失败为 "ABC: X=12,Y=1,79769313486232E+308"
没有任何上下文,我不确定匹配上述字符串的目的是什么,但我可以理解为什么匹配第一个而不是第二个是完全合法的。
的格式1.79769313486232E+308
是一个非常大的数字的科学记数法(+308 基本上意味着将小数点向右移动 308 位)。它是带点的合法数字,但不带逗号。
确实,某些语言环境可能将逗号用作十进制字符而不是点,但科学记数法已标准化为使用点,编程语言和其他计算机应用程序也会使用这种格式的数字,因此使用这种格式的数字是合法的强制它是一个点并防止使用逗号。
为了说明为什么这很重要,如果在此示例中允许使用逗号,则会对结束值的位置产生歧义Y
,因为逗号已用于显示值的结束,X
而是使用逗号点的Y
可能使计算机认为 的值Y
是1
,这是不正确的。