Rumah  >  Soal Jawab  >  teks badan

正则表达式 - 正则分组匹配时,使用’\n ‘与 $n 为什么不同?

例如:要将第一分组大写:
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_leeringa_lee2758 hari yang lalu1011

membalas semua(3)saya akan balas

  • 我想大声告诉你

    我想大声告诉你2017-04-24 16:01:42

    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

      balas
      0
  • ringa_lee

    ringa_lee2017-04-24 16:01:42

    cuba "1"

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-24 16:01:42

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

    balas
    0
  • Batalbalas