Regex 正则表达式不敏感的速度慢吗?

Regex 正则表达式不敏感的速度慢吗?,regex,language-agnostic,Regex,Language Agnostic,RegexOptions.IgnoreCase比我想象的要贵(例如,几乎无法测量) 假设这适用于PHP、Python、Perl、Ruby等以及C#(我假设Jeff使用的是C#),那么速度会有多慢,我会不会像使用/[a-zA-z]/一样受到类似的惩罚?是的,[a-zA-z]会比设置RegexOptions.IgnoreCase快得多,主要是因为Unicode字符串。但它也有更大的限制-[A-Za-z]与重音国际字符不匹配,它实际上是A-Za-z ASCII集,仅此而已 我不知道你是否看到了Tim

RegexOptions.IgnoreCase比我想象的要贵(例如,几乎无法测量)


假设这适用于PHP、Python、Perl、Ruby等以及C#(我假设Jeff使用的是C#),那么速度会有多慢,我会不会像使用
/[a-zA-z]/
一样受到类似的惩罚?

是的,[a-zA-z]会比设置
RegexOptions.IgnoreCase
快得多,主要是因为Unicode字符串。但它也有更大的限制-[A-Za-z]与重音国际字符不匹配,它实际上是A-Za-z ASCII集,仅此而已

我不知道你是否看到了Tim Bray对我留言的回答,但这是一个很好的回答:

国际化搜索中最棘手的问题之一是大小写。这种大小写的概念仅限于用拉丁语、希腊语和西里尔语字符集编写的语言。说英语的人自然希望搜索不区分大小写,即使这仅仅是因为他们懒惰:如果娜迪亚·琼斯想在谷歌上查找自己,她可能只会键入娜迪亚·琼斯,并希望系统能够处理它

因此,搜索系统通过将单词全部转换为小写或大写来“规范化”单词是相当常见的,无论是用于索引还是查询

问题在于案例之间的映射并不总是像英语中那样简单。例如,德语小写字母“ß”在大写时变为“SS”,而良好的旧大写字母“I”在土耳其语小写时变为无点的“ı”(是的,它们有“I”,其大写版本为“İ”)。我读过(但没有直接证实)在法国和魁北克,对重音字符(如“é”)进行上置的规则是不同的。所有这一切的结果之一是,java.String.toLowerCase()等软件在试图解决所有这些问题时往往运行得非常慢


如果您可以容忍在该正则表达式中包含数字和下划线,则可以使用\w修饰符(Perl语法)。我相信有些引擎支持[:alpha:],但这不是纯Perl\w考虑到您所在的区域设置,并且匹配大小写,我打赌它比忽略大小写时使用[A-Z]要快。

如果您担心这一点,在检查之前将大小写设置为全部大写或全部小写可能是值得的。
例如,在Perl中:

$x = "abbCCDGBAdgfabv";
(lc $x) =~ /bad/;
在某些情况下可能比

$x = "abbCCDGBAdgfabv";
$x =~ /bad/i;

@Brian Warshaw:
[A-z]
还包括一些东西:>>>'.join([chr(c)表示范围内的c(ord('A'),ord('z')+1)])'abcdefghjjjklmnopqrstuvxyz[\]^`abcdefghjjklmnopqrstuvxyz'