从我之前的问题为什么在locale-pragma字符下不匹配?以及如何更改嵌套引号我了解到,在处理UTF-8数据时,您不能信任\wword-char,必须使用Unicode字符属性\p{Word}.现在,我发现零宽度字边界\b也不适用于UTF-8(启用了区域设置),但我没有在Unicode字符属性中找到任何等效字符.我以为我可以自己构建它:(?<=\P{Word})(\p{Word}+)(?=\P{Word})它应该等同于\b(\w+)\b.
在下面的测试脚本中,我有两个数组来测试两个不同的正则表达式.\b当未启用语言环境时,第一个基于工作正常.为了使它也能与locales一起工作,我编写了另一个带有模拟边界的版本,(?=\P{Word})但是它没有按照我的预期工作(我也在脚本中显示了预期的结果).
你是否看到了什么错误以及如何使用ASCII(或没有语言环境)来模拟正则表达式的工作?
#!/usr/bin/perl
use 5.010;
use utf8::all;
use locale; # et_EE.UTF-8 in my case
$| = 1;
my @test_boundary = ( # EXPECTED RESULT:
'"abc def"', # '«abc def»'
'"abc "d e f" ghi"', # '«abc «d e f» ghi»'
'"abc "d e f""', # '«abc «d e f»»'
'"abc "d e f"', # '«abc "d e f»'
'"abc "d" "e" …Run Code Online (Sandbox Code Playgroud) 我正在构建一个用于对不同语言的书籍索引进行排序的软件.它使用Perl,并关闭语言环境.我在Unix上开发它,但它需要可移植到Windows.如果这在原则上是有效的,还是依靠现场工作,我是否会咆哮错误的树?总而言之,Windows实际上是我需要它工作的地方,但我更适合在UNIX环境中开发.