例如:要将第一分组大写:
str = '1abc2aabbcc3aaabbbccc4'
pp str.sub(/(a{2})(b{2})/, '\1.upcase\2') # =>"1abc2aa.upcasebbcc3aaabbbccc4" 第一分组怎么没有变大写呢?
pp str.sub(/(a{2})(b{2})/, '\1'.upcase + '\2') # =>"1abc2aabbcc3aaabbbccc4" 奇怪,upcase()还是没起作用!?
pp str.sub(/(a{2})(b{2})/, $1.upcase + '\2') # =>"1abc2AAbbcc3aaabbbccc4" 使用$1而不是'\1',upcase()才起作用?
Dua isu terlibat di sini:
1,
'1'
dan, perbezaan antara dua rujukan belakang
2, perbezaan halus antara petikan tunggal
'
dan petikan berganda"
dalam RubyAnda mungkin perasan bahawa saya menulis
'1'
bukannya1
, kerana Ruby, sebagai bahasa umum, tidak mempunyai objek seperti1
dengan kata lain, anda tidak boleh menulis1
sahaja.Soalan 1:
Tetapi dalam erti kata yang luas,'1'
digunakan dalam padanan,digunakan padanan luar
pada asasnya ialah pembolehubah global selagi padanan biasa berlaku,
Ruby
akan mengemas kini pembolehubah global ini kepadaPerl
Reka bentuk biasa'1'
pada asasnya adalah rentetan, tetapi digunakan sebagai rujukan belakang untuk kumpulan apabila dipadankansememangnya rujukan belakang biasa, seperti digunakan dalam
Penjelasan:1
,sed
.echo str | sed -E 's,(a{2})(b{2}),21,g'
mewakili kumpulan pertama perlawanan, iaitu,
Tetapi perkara istimewa ialah apabila melakukan penggantian, anda juga boleh menggunakan'1'
, yang bermaksud mengulangi duaa
.a
.
Soalan 2:'1'
dan
dahulu dengan'
digunakan sama, tetapi terdapat perbezaan dalam pemprosesan"
Tanda petikan bergandamewakili
"1"
, iaitu digunakan untuk menaip"u0001"
. Watak ialah satu watak.unicode
dalam tanda petikan tunggal ialah'1'
dan, yang merupakan dua aksara . Huruf besar, tetapi dalam
1
, kaedah'1'.upcase
untuk aksara bukan huruf kecil kembali sendiri.Ruby
#upcase
Memandangkan apa yang anda maksudkan di sini, anda harus menggantikan, kemudian laksanakan kaedah
'1'
, dan kemudian menggantikan rentetan asal Setahu saya, ini tidak boleh dilakukan melainkan ruby adalah dalam bahasa Sediakan sintaks baharu pada tahap, jika tidak,aa
hanyalah rentetan, dan rujukannya kepada kumpulan yang sepadan bukanlah proses yang disimpan dalam pembolehubah Rasanya proses yang dilaksanakan di bahagian bawah akan berubah secara automatik#upcase
dalam'1'
>Digantikan dengan rentetan petikan.'..'
1
Jawapan:dan
ialah'1.upcase2'
dalam petikan tunggal digantikan dengan'1'
dan'1'
masing-masing,aa
kekal tidak berubahbb
.upcase
dengan
,'1'.upcase
'1'
'2'
.upcase
cuba "1"
Apabila parameter dihantar ke kaedah, parameter dikira terlebih dahulu dan kemudian hasilnya dihantar ke kaedah