.net 正则表达式问题
在.NET 4.0中,注册表项.net 正则表达式问题,.net,regex,regexbuddy,.net,Regex,Regexbuddy,在.NET 4.0中,注册表项 "^ABC(: ([^=]+(?<! )=(?! )[^,]+(?<! )(,(?! )|$))+)?$" “^ABC(:([^=])+(?看看[^,],它基本上是说在=(=(?!)之后匹配任何没有,的内容 正则表达式并不十分优雅: 甚至像ABC这样的东西也会匹配。像ABC:X=1Y=1这样的东西也会匹配。我想说的是,不要使用这个,为你需要的东西组装一个合适的正则表达式。你说: 上面的表达式匹配,ABC:X=12,Y=1.79769313486232
"^ABC(: ([^=]+(?<! )=(?! )[^,]+(?<! )(,(?! )|$))+)?$"
“^ABC(:([^=])+(?看看[^,]
,它基本上是说在=(=(?!)
之后匹配任何没有,
的内容
正则表达式并不十分优雅:
甚至像ABC
这样的东西也会匹配。像ABC:X=1Y=1
这样的东西也会匹配。我想说的是,不要使用这个,为你需要的东西组装一个合适的正则表达式。你说:
上面的表达式匹配,ABC:X=12,Y=1.79769313486232E+308”。但对于“ABC:X=12,Y=179769313486232e+308”它失败
如果没有任何上下文,我不确定匹配上述字符串的目的是什么,但我可以理解为什么匹配第一个字符串而不是第二个字符串是完全合法的
1.79769313486232E+308
的格式是一个非常大的数字的科学记数法(+308基本上意味着将小数点308位向右移动)。它是一个带点的合法数字,但不带逗号
诚然,某些地区可能使用逗号作为十进制字符而不是点,但科学记数法是使用点的标准化方法,编程语言和其他使用这种格式数字的计算机应用程序也是如此,因此强制使用逗号并防止使用逗号是合法的
为了说明这一点的重要性,如果在本例中允许使用逗号,则会对Y
的值的结束位置产生歧义,因为逗号已经被用来表示X
的值的结束,使用逗号而不是Y
中的点可能会使计算机认为Y
是1
,这是不正确的。您刚才不是提供了一个示例,说明了它的匹配和不匹配之处吗?它不接受小数点的原因可能是[^,]。这可能是为了在X和Y之间使用“;”。但是这个RegExp很奇怪。我很感激你的回答。正如你猜对的,问题在于语言环境。西班牙语语言环境有“;”作为列表分隔符,所以将X值与Y值分开不是问题。