2014-03-06 18 views
3

在下面的Perl命令行,試圖把第一和第二焦炭引入大寫Perl的單行轉換第一字符大寫 - 邏輯理解

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 

背面參考放置之間\Ú。\ E時將被轉換爲大寫

回答

2

之間的區別:

echo pet | perl -pe 's/^(.{0})(.)/$1\U$2/' # Ans: Pet 
echo pet | perl -pe 's/^(.{1})(.)/$1\U$2/' # Ans: pEt 

是什麼都沒有匹配在t他首先在第一個案件中捕獲組,而在第二個案件中第一個案件中捕獲了p

所述第一殼體的一個較短的等效將是:

$ echo pet | perl -pe 's/^(.)/\U$1/' 
Pet 

此外,以下應澄清它:

$ echo pet | perl -pe 's/^(.{0})(.)/$1\U$2$2/' 
PPet 

(第二反向引用被印刷兩次,並可以產生2個P小號)

相關問題