Saya perlu mengganti nilai string ke dalam ekspresi reguler saya di Ruby. Apakah ada cara mudah untuk melakukan ini? Sebagai contoh:
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0"
if goo =~ /value of foo here dynamically/
puts "success!"
end
Jawaban:
Sama seperti penyisipan string.
sumber
Perhatikan bahwa
Regexp.quote
dalam jawaban Jon L. ini penting!Jika Anda hanya melakukan versi "jelas":
maka periode dalam teks pertandingan Anda diperlakukan sebagai wildcard regexp, dan
"0.0.0.0"
akan cocok"0a0b0c0"
.Perhatikan juga bahwa jika Anda benar-benar hanya ingin memeriksa kecocokan substring, Anda bisa melakukannya
yang tidak memerlukan kutipan tambahan atau mengkhawatirkan karakter khusus.
sumber
.quote()
) juga bisa berguna jika Anda ingin membuat regex menggunakan string.if goo.include?(foo)
" => Benar ketika Anda tertarik untuk memeriksa keberadaan. Jika Anda tertarik untuk mengganti dan sudah menggunakan String.gsub, maka Regexp.quote mungkin satu-satunya pilihan Anda.Regexp.new
atauRegexp.compile
.Mungkin
Regexp.escape(foo)
akan menjadi titik awal, tetapi ada alasan yang baik Anda tidak dapat menggunakan ekspresi-interpolasi lebih konvensional:"my stuff #{mysubstitutionvariable}"
?Anda juga bisa menggunakan
!goo.match(foo).nil?
string literal.sumber
sumber
Gunakan Regexp.new baru:
sumber
Inilah jawaban lain yang terbatas tetapi bermanfaat:
Saya menemukan saya bahwa saya dapat dengan mudah memasukkan ke dalam regex tanpa menggunakan Regexp.quote atau Regexp.escape jika saya hanya menggunakan tanda kutip tunggal pada string input saya: (cocok dengan alamat IP)
kutipan tunggal hanya menafsirkan \\ dan \ '.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Ini membantu saya ketika saya perlu menggunakan bagian panjang yang sama dari regex beberapa kali. Tidak universal, tapi cocok dengan contoh pertanyaan, saya percaya.
sumber
sumber