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)
}