2011-12-04 47 views
11

有人可以幫助我編碼OCaml中的有效子串檢查嗎?給定兩個字符串,檢查第一個是否包含第二個字符串?Ocaml中的子串檢查

使用Str模塊,我們可以做到這一點嗎?

回答

9

像這樣的東西可能會奏效:

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

下面是功能的一些測試:

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

如果's2'具有特殊的正則表達式的字符,該不會工作它的序列,如'.'。你必須首先調用'Str.quote s2'。 – nlucaroni

+1

我不認爲這是真的。 'regexp_string'的目的是完全匹配一個特定的字符串。它大概是在內部引用。我的測試顯示這個代碼工作正常。 –

+1

contains是一個錯誤的名字,因爲它在擴展庫中已經有了另一個含義。 – ygrek

2
+1

我得到錯誤。 'String.exists'abc「」a「;; , 錯誤:未綁定值String.exists' 那麼如何使用這個新功能呢? – priyanka

+0

#require「extlib」;;打開ExtLib ;; – ygrek

+1

它仍然不工作:( – priyanka

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

需要核心,對不對? – unhammer