正则表达式 - 正则分组匹配时,使用’\n ‘与 $n 为什么不同?
ringa_lee
ringa_lee 2017-04-24 15:59:42
0
3
968

例如:要将第一分组大写:
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()才起作用?

ringa_lee
ringa_lee

ringa_lee

membalas semua(3)
我想大声告诉你

Dua isu terlibat di sini:
1, '1' dan , perbezaan antara dua rujukan belakang
2, perbezaan halus antara petikan tunggal ' dan petikan berganda " dalam Ruby

Anda mungkin perasan bahawa saya menulis '1' bukannya 1, kerana Ruby, sebagai bahasa umum, tidak mempunyai objek seperti 1 dengan kata lain, anda tidak boleh menulis 1 sahaja.

Soalan 1:

'1' digunakan dalam padanan, digunakan padanan luar pada asasnya ialah pembolehubah global selagi padanan biasa berlaku, Ruby akan mengemas kini pembolehubah global ini kepada Perl Reka bentuk biasa '1' pada asasnya adalah rentetan, tetapi digunakan sebagai rujukan belakang untuk kumpulan apabila dipadankan

Tetapi dalam erti kata yang luas,

sememangnya rujukan belakang biasa, seperti digunakan dalam 1, sed.echo str | sed -E 's,(a{2})(b{2}),21,g'

str =~ /(a{2})(b{2})/
  #=> 'aa'
str =~ /(a)(b)/
  #=> 'a'
str.sub(/(a{2})(b{2})/, '')  #=> 1abc2bbaacc3aaabbbccc4
Penjelasan:

mewakili kumpulan pertama perlawanan, iaitu, '1', yang bermaksud mengulangi dua a.a

Tetapi perkara istimewa ialah apabila melakukan penggantian, anda juga boleh menggunakan

.'1'

Soalan 2:

Dalam kebanyakan kes,

dan ' digunakan sama, tetapi terdapat perbezaan dalam pemprosesan " Tanda petikan berganda mewakili "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 #upcaseMemandangkan apa yang anda maksudkan di sini, anda harus menggantikan

dahulu dengan

, 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.'..' 1Jawapan:

  • ,

    dan '1.upcase2' dalam petikan tunggal digantikan dengan '1' dan '1' masing-masing, aa kekal tidak berubah bb.upcase

    ialah
  • dan kemudian sambungkan
  • dengan '1'.upcase '1''2'

    ,
  • Rentetan storan boleh ubah
  • , kemudian gunakan huruf besar

    .upcase

左手右手慢动作

cuba "1"

Peter_Zhu

Apabila parameter dihantar ke kaedah, parameter dikira terlebih dahulu dan kemudian hasilnya dihantar ke kaedah

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!