Go で否定後読みアサーションをシミュレートするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-27 14:18:11
オリジナル
429 人が閲覧しました

How Can I Simulate Negative Lookbehind Assertions in Go?

Go での否定後読みアサーションのシミュレーション

否定後読みアサーションは Go ではネイティブにサポートされていませんが、同様の結果を達成する代替方法があります。たとえば、「@」、「#」、または「/」などのプレフィックスを持つコマンドを除外しながら、「foo bar baz」のようなコマンドを抽出しようとする場合、否定的な後読みの代わりに否定された文字セットを利用できます。

たとえば、次の正規表現は、次の文字で始まらない単語に一致します:

\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
}
ログイン後にコピー

このフィルタを処理関数と組み合わせて単語を削除できます。以下に示すように、特定の接頭辞を使用して:

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &&
            strings.Index(x, "@") != 0 &&
            strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}
ログイン後にコピー

これらのフィルタリング手法を適用することで、Go での否定後読み動作をシミュレートし、効率的な処理を実現できます。特定のパターンのマッチングと抽出。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート