ホームページ >バックエンド開発 >Golang >Go 正規表現で負の後読みをエミュレートするにはどうすればよいですか?

Go 正規表現で負の後読みをエミュレートするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-28 20:49:11443ブラウズ

How Can I Emulate Negative Lookbehinds in Go Regular Expressions?

Go での負の後読みのエミュレーション

Go はパフォーマンス上の理由から正規表現での負の後読みをネイティブにサポートしていませんが、代替戦略を使用して同様の機能を実現できます。

オリジナルを考慮してください正規表現:

\b(?<![@#\/])\w.*

否定された後読みは文字セットのみを検査するため、否定された文字セット自体に置き換えることができます:

\b[^@#/]\w.*

文字が先頭に現れる場合文字列に ^ アンカーを追加します:

(?:^|[^@#\/])\b\w.*

より洗練されたアプローチの場合、フィルター関数は次のようになります。実装されている:

func Filter(vs []string, f func(string) bool) []string {
    vsf := make([]string, 0)
    for _, v := range vs {
        if f(v) {
            vsf = append(vsf, v)
        }
    }
    return vsf
}

このフィルター関数は、Process 関数で使用できます:

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &amp;&amp;
            strings.Index(x, "@") != 0 &amp;&amp;
            strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}

全体的に、これらの手法により、Go での負の後読みのエミュレーションが可能になり、次の回避策が提供されます。この機能には直接的な言語サポートがありません。

以上がGo 正規表現で負の後読みをエミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。