在以下Perl命令行中,尝试将第一个和第二个char转换为大写
echo pet | perl -pe 's/^(.{0})(.)/$1\U$2/' # Ans: Pet
echo pet | perl -pe 's/^(.{1})(.)/$1\U$2/' # Ans: pEt
但无法理解语法(。{0})(。)和(。{1})(。)
你能说清楚它是如何运作的吗?
但是,我发现上述内容可以通过以下语法简单地实现:
echo pet | perl -pe 's/(\w)/\U$1\E/' # Ans: Pet
echo pet | perl -pe 's/(\w)(\w)/$1\U$2/' # Ans: pEt
放置在 \ U 和 \ E 之间的后退参考将转换为大写
答案 0 :(得分:2)
之间的区别:
echo pet | perl -pe 's/^(.{0})(.)/$1\U$2/' # Ans: Pet
echo pet | perl -pe 's/^(.{1})(.)/$1\U$2/' # Ans: pEt
是第一种情况下第一个捕获组中没有匹配,而第二种情况下第一组中捕获p
。
第一种情况的较短等价物是:
$ echo pet | perl -pe 's/^(.)/\U$1/'
Pet
此外,以下内容应澄清:
$ echo pet | perl -pe 's/^(.{0})(.)/$1\U$2$2/'
PPet
(第二个反向引用打印两次,产生2 P
s。)