Perl one-liner转换第一个字符大写 - 逻辑理解

时间:2014-03-06 10:44:57

标签: regex perl

在以下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 之间的后退参考将转换为大写

1 个答案:

答案 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。)