erlang 字符速记\s的实现功能

ukxgm1gy  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(178)

我想知道为什么在Erlang的正则表达式库re中,字符简写\s只选择一个空格(32 ASCII字符),而不是[ \\t\\n\\r]正则表达式的等价物。
同时,\s-\S(非空格字符速记)的“反模式”实现了可预测的行为。

测试实验室
ztigrdn8

ztigrdn81#

我仍然在re库的文档中找到了问题的答案。
为了与Perl兼容,\s不用于匹配VT字符(代码11),这使得它与POSIX“space”类不同。然而,Perl在5.18版本中添加了VT,PCRE在8.34版本中也添加了VT。默认的\s字符现在是HT(9)、LF(10)、VT(11)、FF(12)、CR(十三)、空间(32),在“C”区域设置中定义为白色。如果发生区域设置特定的匹配,此列表可能会有所不同。例如,在某些区域设置中,“不间断空格”字符(\xA0)被识别为白色,而在其他情况下,VT字符则不是。
由此,我得出结论,预期的工作是可能的,所以只有当有一个设置的语言环境值-“C”。
现在我明白了为什么一切都是这样工作的--这是开发人员的构想,也就是说,我们在用Erlang实现正则表达式时需要考虑这个特性。

brjng4g3

brjng4g32#

为了克服实现限制(与需要考虑locale值有关),我实现了一个项目,以便能够使正则表达式文本适应我的软件的可用功能(我的操作系统没有所需的locale参数集,但我希望继续使用它)。
这是一个re_tuner助手库。

相关问题