在.NET 4.0中,reg ex是什么,
"^ABC(: ([^=]+(?<! )=(?! )[^,]+(?<! )(,(?! )|$))+)?$"
匹配?
一些示例示例会有很大帮助。
我对以下结果感到非常惊讶。 上述表达式匹配“ABC:X = 12,Y = 1.79769313486232E + 308”。但它失败了“ABC:X = 12,Y = 1,79769313486232E + 308”。唯一的区别是双号的十进制符号。
感谢。
答案 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
,这是不正确的。