gpt4 book ai didi

regex - Perl 正则表达式匹配大型 Unicode 代码点

转载 作者:行者123 更新时间:2023-12-04 16:19:32 25 4
gpt4 key购买 nike

我试图用单引号或双引号替换各种字符。

这是我的测试文件:

# Replace all with double quotes
" fullwidth
“ left
” right
„ low
" normal

# Replace all with single quotes
' normal
‘ left
’ right
‚ low
‛ reverse
` backtick

我正在努力做到这一点...
perl -Mutf8 -pi -e "s/[\x{2018}\x{201A}\x{201B}\x{FF07}\x{2019}\x{60}]/'/ug" test.txt
perl -Mutf8 -pi -e 's/[\x{FF02}\x{201C}\x{201D}\x{201E}]/"/ug' text.txt

但只有反引号字符被正确替换。我认为这与其他代码点太大有关,但我找不到任何关于此的文档。

我这里有一个 one-liner它转储 Unicode 代码点,以验证它们是否与我的正则表达式匹配。
$ awk -F\  '{print $1}' test.txt | \
perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'

U+FF02 "
U+201C “
U+201D ”
U+201E „
U+0022 "

U+0027 '
U+2018 ‘
U+2019 ’
U+201A ‚
U+201B ‛
U+0060 `

为什么我的正则表达式不匹配?

最佳答案

它不匹配,因为您忘记了 -CSAD在你对 Perl 的调用中,并且没有 $PERL_UNICODE设置在您的环境中。你只说了-Mutf8宣布您的源代码采用该编码。这不会影响您的 I/O。

你需要:

$ perl -CSAD -pi.orig -e "s/[\x{2018}\x{201A}\x{201B}\x{FF07}\x{2019}\x{60}]/'/g" test.txt

我确实在 this answer 中提到过这种事情一些时间。

关于regex - Perl 正则表达式匹配大型 Unicode 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com