Ruby benim normal ifade içine bir dize değerini yerine gerekir. Bunu yapmanın kolay bir yolu var mı? Örneğin:
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
Ruby benim normal ifade içine bir dize değerini yerine gerekir. Bunu yapmanın kolay bir yolu var mı? Örneğin:
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
Yanıtlar:
Dize ekleme ile aynı.
if goo =~ /#{Regexp.quote(foo)}/
#...
Not Regexp.quote
yılında Jon L. cevabı önemlidir!
if goo =~ /#{Regexp.quote(foo)}/
Sadece "açık" sürümü yaparsanız:
if goo =~ /#{foo}/
eşleşme metninizdeki dönemler normal ifade joker karakterleri olarak değerlendirilir ve "0.0.0.0"
eşleşir "0a0b0c0"
.
Ayrıca, yalnızca bir alt dize eşleşmesini gerçekten kontrol etmek istiyorsanız,
if goo.include?(foo)
özel karakterler için ek bir alıntı veya endişe gerektirmez.
.quote()
Bir dize kullanarak bir normal ifade oluşturmak istiyorsanız , bunun tersinin (kullanılmıyor ) da yararlı olabileceğini unutmayın.
if goo.include?(foo)
" => Varlığını kontrol etmek istediğinizde True. String.gsub'ı değiştirmek ve zaten kullanmakla ilgileniyorsanız, Regexp.quote tek seçeneğiniz olabilir.
Regexp.new
ya Regexp.compile
.
Regexp.compile(Regexp.escape(foo))
Regexp.new kullanın:
if goo =~ Regexp.new(foo) # Evaluates to /0.0.0.0/
İşte sınırlı ama kullanışlı başka bir cevap:
Ben sadece benim giriş dizesinde tek tırnak kullandı: Regexp.quote veya Regexp.escape kullanmadan kolayca bir regex ekleyebilirsiniz ki keşfetti: (bir IP adresi eşleştirme)
IP_REGEX = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
my_str = "192.0.89.234 blahblah text 1.2, 1.4" # get the first ssh key
# replace the ip, for demonstration
my_str.gsub!(/#{IP_REGEX}/,"192.0.2.0")
puts my_str # "192.0.2.0 blahblah text 1.2, 1.4"
tek tırnak sadece \\ ve \ 'yorumlamak.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Bir regex aynı uzun bölümünü birkaç kez kullanmanız gerektiğinde bu bana yardımcı oldu. Evrensel değil, ama soru örneğine uyuyor inanıyorum.
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0"
puts "success!" if goo =~ /#{foo}/