区域设置感知Perl正则表达式(匹配字边界)

时间:2009-10-12 07:38:11

标签: regex perl internationalization locale

我目前有点卡在Perl中的正则表达式(取自我的earlier question)以匹配非ASCII语言环境中的单词字符(即德语变音符号)。

我已经尝试了各种各样的事情,比如设置正确的语言环境(使用setlocale),将我从MySQL收到的数据转换为UTF8(使用decode_utf8),等等......不幸的是,无济于事。谷歌也没多大帮助。

是否有机会获得以下正则表达式区域设置,以便

$street = "Täststraße"; # I know that this is not orthographically correct
$street =~ s{
               \b (\w{0,3}) (\w*) \b
            }
            {
               $1 . ( '*' x length $2 )
            }gex;

最终返回$street = "Täs*******"而不是"Tästs***ße"

1 个答案:

答案 0 :(得分:6)

我希望正则表达式导致“Täs*******”。这就是我在上面的代码中使用utf-8编码文件“使用utf8”时得到的结果。

(如果一切都是拉丁语-1,则会改变正则表达式引擎的行为。因此存在utf8::upgrade。请参阅Unicode::Semantics。)

编辑:我看到你修复了你的帖子,我们同意预期的结果。基本上,当您在regexp上需要Unicode语义时,请使用Unicode :: Semantics。