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% " }\n
Run Code Online (Sandbox Code Playgroud)\n($new
可能与旧的相同,$&
) \xc2\xa0\nor 直接组成您需要的表达式
s{...}{ " %" . $& =~ tr[...][...]r . "% " }\n
Run Code Online (Sandbox Code Playgroud)\n鉴于问题中的括号注释
\n\n\n(我尝试分配
\n$&
给一个变量$m
并使用$m
它,但这并没有解决问题)
另一种方法是首先复制$&
到变量中,然后按照您的意愿使用它
{...}{ my $m = $&; $m =~ tr[...][...]; " %$m% " }\n
Run Code Online (Sandbox Code Playgroud)\n请注意,现在我们不需要修饰符/r
,因为$m
应该就地更改它(使用 不会发生什么/r
)
归档时间: |
|
查看次数: |
79 次 |
最近记录: |