资源
RegexOptions.IgnoreCase比我想象的要贵(例如,应该几乎不可测量)
假设这适用于PHP,Python,Perl,Ruby等以及C#(这是我假设Jeff正在使用的),它会减速多少,并且我会/[a-zA-z]/
像我一样承受类似的惩罚/[a-z]/i
?
是的,[A-Za-z]比设置更快RegexOptions.IgnoreCase
,主要是因为Unicode字符串.但它也有更多限制 - [A-Za-z] 与重音国际字符不匹配,它实际上是A-Za-z ASCII集,仅此而已.
我不知道你是否看到Tim Bray对我的信息的回答,但这是一个很好的答案:
国际化搜索中最棘手的问题之一是大写和小写.这种情况的概念仅限于用拉丁语,希腊语和西里尔字符集编写的语言.讲英语的人自然希望搜索不区分大小写,只因为他们是懒惰的:如果Nadia Jones想要在Google上看到自己,她可能只会输入nadia jones并期望系统能够处理它.
因此,搜索系统通过将单词全部转换为小写或大写来"标准化"单词,这对于索引和查询都是相当常见的.
问题在于案例之间的映射并不总是像英语一样简单.例如,德国小写字母"ß"在上层时变为"SS",而在土耳其语中下降的好旧资本"I"变成无点的"ı"(是的,他们有"我",其大写版本是"İ").我已经阅读(但未经过第一手验证),在法国和魁北克省,重新加上重音字符"é"的规则是不同的.所有这一切的结果之一是,像java.String.toLowerCase()这样的软件在尝试解决所有这些角落案例时往往运行得非常慢.
http://www.tbray.org/ongoing/When/200x/2003/10/11/SearchI18n