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.quoteyı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.newya 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}/