Ado*_*obe 0 regex unicode perl
我在perl-5.24上,我偶然发现\b不是unicode:
$ echo '""test"" ""????""' | perl -pe 's/""\b/“/g'
“test"" ""????""
Run Code Online (Sandbox Code Playgroud)
在我预期的地方“test"" “????"".
然后我了解了perl-5.22.1正则表达式中的unicode扩展,特别是这个:\b{wb}.但是通过这些扩展我仍然得到错误的结果:
$ echo '""test"" ""????""' | perl -pe 's/""\b{wb}/“/g'
“test“ “????“
Run Code Online (Sandbox Code Playgroud)
在我预期的地方“test"" “????"".
我的问题是:谁做我转换""test"" ""????""到“test"" “????""通过正则表达式的Perl?
你告诉s///要匹配以下内容:
22.22.74.65.73.74.22.22.20.22.22.D1.82.D0.B5.D1.81.D1.82.22.22.A
Run Code Online (Sandbox Code Playgroud)
s///(或者更具体地说,\b),期望Unicode代码点,这意味着上面被视为
""test"" ""Ñ<82>еÑ<81>Ñ<82>""
Run Code Online (Sandbox Code Playgroud)
这显然不是你想要的字符串.
同样,您声称您的代码包含以下内容:
s/""\b/“/g
Run Code Online (Sandbox Code Playgroud)
Perl希望使用ASCII编码脚本,除非您使用UTF-8对脚本进行编码并添加use utf8;以让它知道.
解码输入.编码输出.
$ echo '""test"" ""????""' | perl -pe'
use utf8;
use open ":std", ":encoding(UTF-8)";
s/""\b/“/g
'
“test"" “????""
Run Code Online (Sandbox Code Playgroud)
要么
$ echo '""test"" ""????""' | perl -CSDA -Mutf8 -pe's/""\b/“/g'
“test"" “????""
Run Code Online (Sandbox Code Playgroud)