Regex 用于包含特殊字符û;
在Perl 5.8.5中,我需要编写一个正则表达式,它应该匹配包含扩展拉丁字符集的整个单词。如果我这样写“\b\w+\b”,如果遇到像这样的字符,它就会断开 为了确保在Perl 5.8.5中使用正则表达式对拉丁1(ISO8859-1)字符集(包括所有扩展字符)进行整词匹配,需要做些什么 Perl安装在CentOS 4.6中。Linux中的locale命令提供以下输出:Regex 用于包含特殊字符û;,regex,string,perl,Regex,String,Perl,在Perl 5.8.5中,我需要编写一个正则表达式,它应该匹配包含扩展拉丁字符集的整个单词。如果我这样写“\b\w+\b”,如果遇到像这样的字符,它就会断开 为了确保在Perl 5.8.5中使用正则表达式对拉丁1(ISO8859-1)字符集(包括所有扩展字符)进行整词匹配,需要做些什么 Perl安装在CentOS 4.6中。Linux中的locale命令提供以下输出: LANG=en_US LC_CTYPE="en_US" LC_NUMERIC="en_US" LC_TIME="en_US" L
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”进行匹配,那么它也可以与相同的正则表达式配合使用
谢谢您的帮助。您需要
使用locale
来创建对locale敏感的正则表达式。不过,这也会影响许多其他Perl方面,因此您可能不希望全局启用它。请参阅perllocale
文档。正如ikegami所指出的,您可能只是没有解码您的输入。
考虑一下这一班轮(在UTF-8终端上):
由于它在匹配之前对输入字符串进行解码,这要归功于-Mopen=:std,:utf8
(这也会导致对输出进行编码)。
您可以通过显式解码/编码(通过等)获得相同的结果
现在从上面的一行中删除-Mopen=:std,:utf8
,您将获得与您描述的相同的意外匹配(在“gr”子字符串上)
更多信息:
我不知道这么旧的perl是否还有其他问题(perl 5.8.8应该可以工作)。您使用的是perl 5.8.5,这是一个非常旧的perl版本。我不确定该版本的Perl如何支持unicode。Perldoc的网页并没有追溯到很久以前,我无法通过Perlbrew安装它。是否可以更新到较新版本的Perl?如果您对输入进行解码,即使它是iso-8859-1,也可以解决您的问题。
echo "abc grûler xyz" | perl -Mopen=:std,:utf8 -le '$,="\n"; print <> =~ /\b\w+\b/g'
abc
grûler
xyz