【发布时间】:2014-07-14 13:20:08
【问题描述】:
在 Perl 5.8.5 中,我需要编写一个正则表达式来匹配包含扩展 latin1 字符集的整个单词。如果我这样写“\b\w+\b”,如果遇到这样的字符“û”,它就会中断。
需要什么来确保在 Perl 5.8.5 中使用正则表达式的整个单词匹配适用于 Latin1 (ISO8859-1) 字符集,包括所有扩展字符?
Perl 安装在 CentOS 4.6 中。 Linux 中的 locale 命令给出以下输出:
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=
对于给定的单词,例如。 “abc grûler xyz”,不应该搜索与字符串“gr”的整个单词匹配的正则表达式,在我的情况下搜索的是单词“grûler”的子字符串。正则表达式是:
$string =~ /\b\w+\b/;
输出是“gr”,这是不正确的,因为它是一个子字符串。
另外,我不想完全排除扩展字符的匹配。如果需要对整个单词“grûler”进行匹配,那么它也应该适用于相同的正则表达式。
感谢您的帮助。
【问题讨论】:
-
您使用的是 Perl 5.8.5,它是 Perl 的一个非常旧的版本。我不确定那个版本的 Perl 是如何支持 unicode 的。 Perldoc 的网页并没有那么远,我无法通过 Perlbrew 安装它。是否可以更新到更新版本的 Perl?
-
如果你解码你的输入,即使它是 iso-8859-1,它会解决你的问题。