2009-10-12 36 views
4

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

我已经尝试了各种东西,如设置正确的语言环境(使用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"

回答

6

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

(。如果一切的Latin-1,改变正则表达式引擎的行为。因此utf8::upgrade存在见Unicode::Semantics

编辑:我看你定你的职位和我们达成一致的预期结果。基本上,当你想在你的regexps上使用Unicode语义时,使用Unicode :: Semantics。

+0

这很奇怪......当以独立的方式运行代码确实有效。 事实证明,“使用语言环境”打破了事情......一旦我删除了一切恢复正常。 – 2009-10-12 08:06:38

+0

是的,应该避免使用“locale”。如果你在UTF8编码的源代码中有utf8文字,请使用“utf8”。否则,使用Encode处理编码,并在担保时使用Unicode :: Semantics。 – jrockway 2009-10-12 08:08:00

+0

在所有情况下,“使用语言环境”是一个坏主意吗?它是否应该被弃用? – Ether 2009-10-12 16:41:38

相关问题