Xeo*_*oss 6
strings.Contains
除非您仅搜索少数语言(例如英语)的ASCII字符 ,而没有某些音调/变音符号或其他unicode字形修饰符(如@snap所提到的那样,它是更“正确”的定义方式),否则当前答案都不正确。Google的标准短语是“搜索非ASCII字符”。
为了获得适当的语言搜索支持,您需要使用http://golang.org/x/text/search。
func SearchForString(str string, substr string) (int, int) {
m := search.New(language.English, search.IgnoreCase)
return = m.IndexString(str, substr)
}
start, end := SearchForString('foobar', 'bar');
if start != -1 && end != -1 {
fmt.Println("found at", start, end);
}
或者,如果您只想要起始索引:
func SearchForStringIndex(str string, substr string) (int, bool) {
m := search.New(language.English, search.IgnoreCase)
start, _ := m.IndexString(str, substr)
if start == -1 {
return 0, false
}
return start, true
}
index, found := SearchForStringIndex('foobar', 'bar');
if found {
fmt.Println("match starts at", index);
}
language.Taglanguage.Und
更新资料
似乎有些混乱,因此下面的示例应有助于澄清问题。
package main
import (
"fmt"
"strings"
"golang.org/x/text/language"
"golang.org/x/text/search"
)
var s = `Æ`
var s2 = `Ä`
func main() {
m := search.New(language.Finnish, search.IgnoreDiacritics)
fmt.Println(m.IndexString(s, s2))
fmt.Println(CaseInsensitiveContains(s, s2))
}
// CaseInsensitiveContains in string
func CaseInsensitiveContains(s, substr string) bool {
s, substr = strings.ToUpper(s), strings.ToUpper(substr)
return strings.Contains(s, substr)
}