gpt4 book ai didi

regex - 我应该使用\d 或 [0-9] 来匹配 Perl 正则表达式中的数字吗?

转载 作者:行者123 更新时间:2023-12-03 06:12:03 25 4
gpt4 key购买 nike

在过去几周阅读了许多问题/答案后,我发现在 Perl 正则表达式中使用 \d 被评论为不正确。在 Perl 的更高版本中,\d[0-9] 不同,因为 \d 将表示任何 Unicode 字符具有数字属性,[0-9] 代表字符“0”、“1”、“2”、...、“9”。

我知道在某些情况下 [0-9] 是正确的使用方式,而在其他情况下 \d 则是正确的选择。我想知道哪些人认为使用的默认值是正确的?

我个人认为 \d 表示法非常简洁且富有表现力,而相比之下 [0-9] 则有些麻烦。但我在编写多语言代码方面缺乏经验,或者更确切地说,对不适合 ASCII 字符范围的语言进行代码编写,因此可能比较幼稚。

我注意到了

$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\\d' | wc -l
298
$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\[0-9\]' | wc -l
26

最佳答案

在我看来,使用 \d 非常危险,这是该语言的一个糟糕的设计决策,因为在大多数情况下您需要 [0-9]。霍夫曼编码将规定对 ASCII 数字使用 \d

之前的大多数发帖者已经强调了为什么应该使用 [0-9],所以让我给您提供更多数据:

  • 如果我正确地阅读了 unicode 图表,“70”是一个数字(印度语中的 70,不要相信我的话)。

  • 试试这个:

    $ perl -le '$one = chr 0xFF11; print "$one + 1 = ", $one+1;'
    1 + 1 = 1
  • 以下是有效数字的部分列表(可能会或可能不会在您的浏览器中正确显示,具体取决于您使用的字体),对于每个数字,只有第一个数字在以下情况下被解释为数字:用Perl做算术,如上所示:

     ZERO:  0٠۰߀०০੦૦୦௦౦೦൦๐໐0
    ONE: 1١۱߁१১੧૧୧௧౧೧൧๑໑1
    TWO: 2٢۲߂२২੨૨୨௨౨೨൨๒໒2
    THREE: 3٣۳߃३৩੩૩୩௩౩೩൩๓໓3
    FOUR: 4٤۴߄४৪੪૪୪௪౪೪൪๔໔4
    FIVE: 5٥۵߅५৫੫૫୫௫౫೫൫๕໕5
    SIX: 6٦۶߆६৬੬૬୬௬౬೬൬๖໖6
    SEVEN: 7٧۷߇७৭੭૭୭௭౭೭൭๗໗7
    EIGHT: 8٨۸߈८৮੮૮୮௮౮೮൮๘໘8
    NINE: 9٩۹߉९৯੯૯୯௯౯೯൯๙໙9��

你还不相信吗?

关于regex - 我应该使用\d 或 [0-9] 来匹配 Perl 正则表达式中的数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com