相关疑难解决方法(0)

为什么在我的正则表达式模式中使用POSIX字符类会产生意想不到的结果?

我遇到了一些奇怪的Perl行为:在regexp中使用Posix字符类完全改变了结果字符串的排序顺序.

这是我的测试程序:

sub namecmp($a,$b) {
  $a=~/([:alpha:]*)/;
  # $a=~/([a-z]*)/;
  $aword= $1;

  $b=~/([:alpha:]*)/;
  # $b=~/([a-z]*)/;
  $bword= $1;
  return $aword cmp $bword;
};

$_= <>;
@names= sort namecmp split;
print join(" ", @names), "\n";
Run Code Online (Sandbox Code Playgroud)

如果使用[az]更改为注释掉的正则表达式,则会获得正常的词典排序顺序.但是,Posix [:alpha:]字符类会产生一些怪异的排序顺序,如下所示:

$test_normal
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cbb
aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cbb

$test_posix
aaa aab aac aba abb …
Run Code Online (Sandbox Code Playgroud)

regex sorting perl

7
推荐指数
3
解决办法
2519
查看次数

标签 统计

perl ×1

regex ×1

sorting ×1