在以下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/