在以下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 之间时,将转换为大写

最佳答案

和...之间的不同:

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

关于regex - Perl单线转换首字符大写-逻辑理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22222074/

10-10 16:47