ホームページ > バックエンド開発 > Golang > Go 正規表現でマッチングするときに特定の文字列を除外する方法は?

Go 正規表現でマッチングするときに特定の文字列を除外する方法は?

Mary-Kate Olsen
リリース: 2024-12-20 07:58:12
オリジナル
899 人が閲覧しました

How to Exclude a Specific String When Matching in Go Regular Expressions?

Go の正規表現での定数文字列を除くすべての一致

Go では、正規表現エンジン RE2 を利用して、先読みアサーションを使用してすべてを一致させる直接的な方法はありません。特定の文字列を除く文字。ただし、この機能を実現するには別のアプローチもあります。

否定パターンを生成する Web サービス

  1. オンライン サービス [Non-match REGEX](http ://www.formauri.es/personal/pgimeno/misc/non-match-regex) を使用して、必要な文字列の否定パターンを生成します。 exclude (この場合は "somestring").
  2. 正規表現で、最後の (.*) を生成された否定パターンに置き換えます (コピーした否定パターンにバックスラッシュがないことを確認してください)。

たとえば、生成された否定パターンが次の場合:

[^([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?$
ログイン後にコピー

最終的な正規表現は次のようになります。例:

/[^/]*/[^/]*/(([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?)$
ログイン後にコピー

すべての部分のキャプチャ

または、入力文字列の 3 つの部分 (スラッシュで区切られた) すべてをスライスにキャプチャすることもできます。次に、3 番目の部分 (val[1]) が除外する文字列 (この場合は「somestring」) と等しいかどうかを確認します。一致しない場合は、期待される結果として val[1] を使用します:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := "anything/anything/somestring"
    r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
    val := r.FindStringSubmatch(s)
    // fmt.Println(val[1]) // -> somestring
    if len(val) > 1 && val[1] != "somestring" { // val has more than 1 element and is not equal to somestring?
        fmt.Println(val[1])      // Use val[1]
    } else {
        fmt.Println("No match")  // Else, report no match
    }
}
ログイン後にコピー

以上がGo 正規表現でマッチングするときに特定の文字列を除外する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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