我需要更改Perl中\w
字符类的行为。我希望它匹配[a-zA-Z0-9_.]
。也就是说,我想将.
添加到角色类中。这可能吗?
我需要修改\w
,因为我想要一些模块(例如Getopt::Long
)来查看" foo.bar"作为一个有效的词。
答案 0 :(得分:6)
没有办法改变预定义字符类的含义。但是,您可以使用[\w.]
答案 1 :(得分:4)
这就是全部 a)未经测试 b)非常讨厌 c)不方便 所以它应该是一个评论,唉,我还不能写。
我只看到两种可能性:
LC_CTYPE
下的use locale
来确定哪些字符被认为是"字符"。 perllocale manpage提到了一个安全方面
使用" \ w"正则表达式检查安全文件名或邮件地址可能会被" LC_CTYPE"欺骗。声称像">"等字符的语言环境和" |"是字母数字。
不幸的是,如果不安装系统全局配置,似乎没有办法做到这一点(至少在Unixish操作系统上,不知道Windows)。 Askubuntu有一个关于此的帖子。
总而言之,最好三思而后行这样的事情,它太可能会破坏系统的其他部分,无论如何它都会让维护成为一场噩梦。