.NET开发 正则表达式中的 Bug
又发现了一个 .net 的 bug!最近在使用正则表达式的时候发现:在忽略大小写的时候,匹配值从 0xff 到 0xffff 之间的所有字符,正则表达式竟然也能匹配两个 ASCII 字符:i(code: 0x69) 和 I(code: 0x49);但是仍然不能匹配其他的 ASCII 字母和数字。
比如以下的代码就是用来测试用正则表达式匹配从 0xff 到 0xffff 的字符。而值范围在 0 到 0xfe 的所有字符是不能被匹配的。
1234567891011121314151617Regex regex = new Regex(@"[\u00FF-\uFFFF]+");
// The characters, whoes value are smaller than 0xff, are not expected to be matched.
for (int i = 0; i < 0xff; i++) {
string s = new string(new char[] { (char)i });
Debug.Assert(
!regex.IsMatch(s),
string.Format("The character was not expected to be matched: 0x{0:X}!", i));
}
// However, the characters whoes value are greater than 0xfe are expected to be matched.
for (int i = 0xff; i <= 0xffff; i++) {
string s = new string(new char[] { (char)i });
Debug.Assert(
regex.IsMatch(s),
string.Format("The character was expected to be matched: 0x{0:X}!", i));
}
这时的运行结果是正常的,没有任何的断言错误出现。
然而当使用忽略大小写的匹配模式时,结果就不一样了。将上面代码中的第一行改成:
1Regex regex = new Regex(@"[\u00FF-\uFFFF]+", RegexOptions.IgnoreCase);
程序运行的时候就会有两处断言错误。它们分别是字符值为 73 和 105,也就是小写字母 i 和大写字母 I。 这个 bug 非常奇怪,别的字符都很正常!而且用 javascript 脚本在 IE (版本是6.0)里面运行也同样有这么 bug 存在(比如下面这段代码)。然而在 Firefox 中运行就是没有问题的。还是 Firefox 好啊,呵呵!
1234567891011121314151617var re = /[\u00FF-\uFFFF]+/;
// var re = /[\u00FF-\uFFFF]+/i;
for(var i=0; i<0xff; i++) {
var s = String.fromCharCode( i );
if ( re.test(s) ){
alert( ''Should not be matched: '' + i + ''!'' );
}
}
for(var i=0xff; i<=0xffff; i++) {
var s = String.fromCharCode( i );
if ( !re.test(s) ){
alert( ''Should be matched: '' + i + ''!'' );
}
}
转载自:http://www.aspnetjia.com/Cont-171.html
转载于:https://www.cnblogs.com/aspnetjia/p/5147229.html
.NET开发 正则表达式中的 Bug相关推荐
- Android实际开发中的bug总结与解决方法(一)
Android实际开发中的bug总结与解决方法(一) 参考文章: (1)Android实际开发中的bug总结与解决方法(一) (2)https://www.cnblogs.com/ywq-come/p ...
- 育碧开发了一个 AI 工具,能快速找出代码中的 Bug
据 Neowin 报道,育碧(Ubisoft)目前正在开发几款旨在改进游戏体验和开发流程的 AI 应用,像是针对玩家被称为 Sam 的 AI 助理,以及一个专注于改善开发流程的 Commit Assi ...
- 测试过程中,遇到开发不认为是bug的bug,该怎么办
这是软件测试员面试时经常被问到的问题.看了很多答案,个人觉得作为有工作经验的测试人员回答时不能完全照搬标准答案,技术面试官想听的当然不止如此.毕竟这种情况在实际工作中也常常出现,具体问题要具体分析,你 ...
- 如何减少开发中的 Bug
作者: Jartto http://jartto.wang/2019/08/24/how-to-decrease-bugs/ 一.概述 爱因斯坦曾经说过:「如果给我一个小时解答一道决定我生死的问题,我 ...
- 移动开发中一些bug及解决方案
网页开发要面对各种各样的浏览器,让人很头疼,而移动开发中,你不但要面对浏览器,还要面对各种版本的手机,ios好一点,而安卓就五花八门了,你可能在开发中也被它们折磨过,或者正在被它们折磨,我在这里说几个 ...
- 正则表达式中的非捕获组是什么?
非捕获组(即(?:) )如何在正则表达式中使用,它们有什么用? #1楼 在复杂的正则表达式中,您可能会希望使用大量的组,其中一些用于重复匹配,而另一些则提供反向引用. 默认情况下,与每个组匹配的文本会 ...
- Java程序员如何在编码中减少bug存在
动力节点Java远程基础班免费赠送学习名额,机会就在眼前,快来报名吧,名额有限,先到先得. Java编程语言在IT行业毋庸置疑是企业中不可缺少的,从Web应用到Android应用,这款语言已经被广泛用 ...
- 发现Java程序中的Bug
昨天在CSDN上阅读 "Java中十个常见的违规编码"这篇文章时,无意中找到了3个 "发现Java程序中的Bug"工具. 文章地址:http://www.csd ...
- nodejs开发 过程中express路由与中间件的理解 - pyj063 - 博客园
nodejs开发 过程中express路由与中间件的理解 nodejs开发 express路由与中间件 路由 通常HTTP URL的格式是这样的: http://host[:port][path] h ...
最新文章
- HDOJ 1060 Leftmost Digit
- 基于Jquery插件Uploadify实现实时显示进度条上传图片
- Linux 文件系统详解
- websocket + node.js聊天系统
- 计算机导论声明型摆设,《计算机导论作业-论文排档》.doc
- 需求分析模板_看完总经理做的公司财务经营分析报告,怪不得人家能拿年薪150万...
- shell 截取某个字符串之后的内容
- Nginx根据url参数匹配跳转
- 设计资源神器,国外网盘免费下载揭秘!
- IIS 405 Method Not Allowed
- python标准差不用numpy_Python:Numpy标准差
- 7-13 寻找大富翁 (25分)
- 基于android的学生考勤请假app
- Unity项目--LoyPoly风格的FPS Demo(附试玩地址)
- php设置pst时区,PHP时区标识符含义
- 用金字塔原理看“⑧荣⑧耻”
- react-native集成阿里云金融实人认证获取当前viewController
- 价值800的swapidc鸟云模板开源版
- 二分法c语言程序排序,二分法插入排序(C语言)
- react中label标签关联的用法
热门文章
- 网络安全之tcp阻截引擎 (一)
- c函数sscanf的高级技巧(二)
- xp电脑多少位怎么看_如何查看电脑是什么操作系统和多少位?
- dpkg命令_Linux常用命令大全(二)
- 【kafka】kafka /log_dir_event_notification的LogDir脱机事件通知
- 【clickhouse】ClickHouseException code: 999 Cannot allocate block number in ZooKeeper: Coordination
- 【Elasticsearch】Elasticsearch:Searchable snapshot - 可搜索的快照
- 【Elasticsearch】Elasticsearch 的异步搜索原理解析 _async_search
- 【ElasticSearch】Es 源码之 IngestService 源码解读
- 【Kafka】Window下kafka开启JMX监控