xpt*_*xpt 2 regex perl function
如何正确使用tr正则表达式替换中的结果?
echo 'E2"C"G | d3"G7" | F3"F" | A3"Dm" ' | perl -pe 's{".*?"}{$& =~ tr [\000-\177][\200-\377]r}ge;'
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试利用结果tr 来构造我想要的东西时,这符合预期,
echo 'E2"C"G | d3"G7" | F3"F" | A3"Dm" ' | perl -pe 's{".*?"}{$& =~ tr [\000-\177][\200-\377]r; " %$&% ";}ge;'
Run Code Online (Sandbox Code Playgroud)
事情开始崩溃(8 位设置的字符串消失了)。
请问如何解决?(我尝试分配$&给一个变量$m并使用$m它,但这并没有解决问题)
$& 变量是只读的,因此tr运算符无法更改它,这就是为什么您将其与修饰符tr一起使用 - 然后它返回更改后的字符串(如果没有更改,则返回未更改的原始字符串)并保持原始字符串不变。/r
因此将返回值分配给一个变量,然后使用该变量
\ns{...}{ my $new = $& =~ tr[...][...]r; " %$new% " }\nRun Code Online (Sandbox Code Playgroud)\n($new可能与旧的相同,$&) \xc2\xa0\nor 直接组成您需要的表达式
s{...}{ " %" . $& =~ tr[...][...]r . "% " }\nRun Code Online (Sandbox Code Playgroud)\n鉴于问题中的括号注释
\n\n\n(我尝试分配
\n$&给一个变量$m并使用$m它,但这并没有解决问题)
另一种方法是首先复制$&到变量中,然后按照您的意愿使用它
{...}{ my $m = $&; $m =~ tr[...][...]; " %$m% " }\nRun Code Online (Sandbox Code Playgroud)\n请注意,现在我们不需要修饰符/r,因为$m应该就地更改它(使用 不会发生什么/r)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |