在Perl中重新定义Word字符类

时间:2015-10-10 12:43:00

标签: regex perl

我需要更改Perl中\w字符类的行为。我希望它匹配[a-zA-Z0-9_.]。也就是说,我想将.添加到角色类中。这可能吗?

我需要修改\w,因为我想要一些模块(例如Getopt::Long)来查看" foo.bar"作为一个有效的词。

2 个答案:

答案 0 :(得分:6)

没有办法改变预定义字符类的含义。但是,您可以使用[\w.]

构建自己的

答案 1 :(得分:4)

这就是全部 a)未经测试 b)非常讨厌 c)不方便 所以它应该是一个评论,唉,我还不能写。

我只看到两种可能性:

  • 编写自定义区域设置 \ w课程使用LC_CTYPE下的use locale来确定哪些字符被认为是"字符"。 perllocale manpage提到了一个安全方面
      

    使用" \ w"正则表达式检查安全文件名或邮件地址可能会被" LC_CTYPE"欺骗。声称像">"等字符的语言环境和" |"是字母数字。

不幸的是,如果不安装系统全局配置,似乎没有办法做到这一点(至少在Unixish操作系统上,不知道Windows)。 Askubuntu有一个关于此的帖子。

  • Monkey-patch所需的功能。如果你不知道用户可能拥有的模块的相应版本(你可以使用你的脚本,那么这会打开一个不同的蠕虫病毒。)

总而言之,最好三思而后行这样的事情,它太可能会破坏系统的其他部分,无论如何它都会让维护成为一场噩梦。