2011-12-04 19 views
11

Birisi OCaml'da etkili bir altyazı denetimi kodlamada bana yardımcı olabilir mi? İki dizeye bakılırsa, ilki ikincisini içerip içermediğini kontrol edin.Subamring check in Ocaml

Str modülünü kullanarak bunu yapabilir miyiz?

cevap

9

Böyle bir şey işe yarayabilecek: Burada

let contains s1 s2 = 
    let re = Str.regexp_string s2 
    in 
     try ignore (Str.search_forward re s1 0); true 
     with Not_found -> false 

fonksiyonun bazı testler şunlardır:

# contains "abcde" "bc";; 
- : bool = true 
# contains "abcde" "bd";; 
- : bool = false 
# contains "abcde" "b.";; 
- : bool = false 
# contains "ab.de" "b.";; 
- : bool = true 
+0

s2' özel regex karakteri vardır 'eğer bu alışkanlık iş içinde diziler, gibi. İlk önce Str.quote s2'yi aramanız gerekecek. – nlucaroni

+1

Bunun doğru olduğunu düşünmüyorum. Regexp_string'in amacı tam olarak belirli bir dizeyle eşleşmektir. Muhtemelen dahili olarak alıntı yapıyor. Testlerim bu kodun iyi çalıştığını gösteriyor. –

+1

içerir, kötü bir addır, bu nedenle uzantı kitaplıklarında başka bir anlamı vardır. – ygrek

2
+1

Hata alıyorum. 'String.exists' abc "" a ";; , Hata: Unbound değer String.exists ' Peki bu yeni işlevi nasıl kullanabilirim? – priyanka

+0

#require "extlib" ;; ExtLib açın; – ygrek

+1

Hala çalışmıyor :( – priyanka

0
let contains_substring search target = 
    String.substr_index search target <> None 
+0

Çekirdek gerektirir, değil mi? – unhammer