又发现了一个 .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相关推荐

  1. Android实际开发中的bug总结与解决方法(一)

    Android实际开发中的bug总结与解决方法(一) 参考文章: (1)Android实际开发中的bug总结与解决方法(一) (2)https://www.cnblogs.com/ywq-come/p ...

  2. 育碧开发了一个 AI 工具,能快速找出代码中的 Bug

    据 Neowin 报道,育碧(Ubisoft)目前正在开发几款旨在改进游戏体验和开发流程的 AI 应用,像是针对玩家被称为 Sam 的 AI 助理,以及一个专注于改善开发流程的 Commit Assi ...

  3. 测试过程中,遇到开发不认为是bug的bug,该怎么办

    这是软件测试员面试时经常被问到的问题.看了很多答案,个人觉得作为有工作经验的测试人员回答时不能完全照搬标准答案,技术面试官想听的当然不止如此.毕竟这种情况在实际工作中也常常出现,具体问题要具体分析,你 ...

  4. 如何减少开发中的 Bug

    作者: Jartto http://jartto.wang/2019/08/24/how-to-decrease-bugs/ 一.概述 爱因斯坦曾经说过:「如果给我一个小时解答一道决定我生死的问题,我 ...

  5. 移动开发中一些bug及解决方案

    网页开发要面对各种各样的浏览器,让人很头疼,而移动开发中,你不但要面对浏览器,还要面对各种版本的手机,ios好一点,而安卓就五花八门了,你可能在开发中也被它们折磨过,或者正在被它们折磨,我在这里说几个 ...

  6. 正则表达式中的非捕获组是什么?

    非捕获组(即(?:) )如何在正则表达式中使用,它们有什么用? #1楼 在复杂的正则表达式中,您可能会希望使用大量的组,其中一些用于重复匹配,而另一些则提供反向引用. 默认情况下,与每个组匹配的文本会 ...

  7. Java程序员如何在编码中减少bug存在

    动力节点Java远程基础班免费赠送学习名额,机会就在眼前,快来报名吧,名额有限,先到先得. Java编程语言在IT行业毋庸置疑是企业中不可缺少的,从Web应用到Android应用,这款语言已经被广泛用 ...

  8. 发现Java程序中的Bug

    昨天在CSDN上阅读 "Java中十个常见的违规编码"这篇文章时,无意中找到了3个 "发现Java程序中的Bug"工具. 文章地址:http://www.csd ...

  9. nodejs开发 过程中express路由与中间件的理解 - pyj063 - 博客园

    nodejs开发 过程中express路由与中间件的理解 nodejs开发 express路由与中间件 路由 通常HTTP URL的格式是这样的: http://host[:port][path] h ...

最新文章

  1. HDOJ 1060 Leftmost Digit
  2. 基于Jquery插件Uploadify实现实时显示进度条上传图片
  3. Linux 文件系统详解
  4. websocket + node.js聊天系统
  5. 计算机导论声明型摆设,《计算机导论作业-论文排档》.doc
  6. 需求分析模板_看完总经理做的公司财务经营分析报告,怪不得人家能拿年薪150万...
  7. shell 截取某个字符串之后的内容
  8. Nginx根据url参数匹配跳转
  9. 设计资源神器,国外网盘免费下载揭秘!
  10. IIS 405 Method Not Allowed
  11. python标准差不用numpy_Python:Numpy标准差
  12. 7-13 寻找大富翁 (25分)
  13. 基于android的学生考勤请假app
  14. Unity项目--LoyPoly风格的FPS Demo(附试玩地址)
  15. php设置pst时区,PHP时区标识符含义
  16. 用金字塔原理看“⑧荣⑧耻”
  17. react-native集成阿里云金融实人认证获取当前viewController
  18. 价值800的swapidc鸟云模板开源版
  19. 二分法c语言程序排序,二分法插入排序(C语言)
  20. react中label标签关联的用法

热门文章

  1. 网络安全之tcp阻截引擎 (一)
  2. c函数sscanf的高级技巧(二)
  3. xp电脑多少位怎么看_如何查看电脑是什么操作系统和多少位?
  4. dpkg命令_Linux常用命令大全(二)
  5. 【kafka】kafka /log_dir_event_notification的LogDir脱机事件通知
  6. 【clickhouse】ClickHouseException code: 999 Cannot allocate block number in ZooKeeper: Coordination
  7. 【Elasticsearch】Elasticsearch:Searchable snapshot - 可搜索的快照
  8. 【Elasticsearch】Elasticsearch 的异步搜索原理解析 _async_search
  9. 【ElasticSearch】Es 源码之 IngestService 源码解读
  10. 【Kafka】Window下kafka开启JMX监控