GoLang mb_strpos

is this article helpful? yes | no
GoLang replacement for PHP's mb_strpos [edit | history]
package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(mb_strpos("聚合科技有限公司", "科技"))                       // 2
    fmt.Println(mb_strpos("聚合科技--有限公司", "公司"))                     // 8
    fmt.Println(mb_strpos("https://www.juhe.cn/ 聚合数据-科技公司", "数据")) // 23
}

func mb_strpos(haystack, needle string) int {
    index := strings.Index(haystack, needle)
    if index == -1 || index == 0 {
        return index
    }
    pos := 0
    total := 0
    reader := strings.NewReader(haystack)
    for {
        _, size, err := reader.ReadRune()
        if err != nil {
            return -1
        }
        total += size
        pos++
        // got it
        if total == index {
            return pos
        }
    }
}

PHP mb_strpos

PHP original manual for mb_strpos [ show | php.net ]

mb_strpos

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

mb_strposFind position of first occurrence of string in a string

Description

int mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] )

Finds position of the first occurrence of a string in a string.

Performs a multi-byte safe strpos() operation based on number of characters. The first character's position is 0, the second character position is 1, and so on.

Parameters

haystack

The string being checked.

needle

The string to find in haystack. In contrast with strpos(), numeric values are not applied as the ordinal value of a character.

offset

The search offset. If it is not specified, 0 is used. A negative offset counts from the end of the string.

encoding

The encoding parameter is the character encoding. If it is omitted, the internal character encoding value will be used.

Return Values

Returns the numeric position of the first occurrence of needle in the haystack string. If needle is not found, it returns FALSE.

Changelog

Version Description
7.1.0 Support for negative offsets has been added.

See Also