文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页技术开发.Net 专栏 → .NET开发正则表达式中的问题

.NET开发正则表达式中的问题

时间:2009/7/10 8:17:00来源:本站整理作者:我要评论(0)

  又发现了一个 .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 + '!' ); 
  } 
  }

相关视频

    没有数据

相关阅读 最新常用正则表达式大全快速学会正则表达式正则表达式基础学习C#中正则表达式使用教程Oracle正则表达式如何学习正则表达式Python正则表达式教程MySQL正则表达式参考

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题