ホームページ >バックエンド開発 >Golang >Go 言語の正規表現に関する高度なチュートリアル: アサーション条件の使用方法

Go 言語の正規表現に関する高度なチュートリアル: アサーション条件の使用方法

WBOY
WBOYオリジナル
2023-07-13 23:49:391180ブラウズ

Go 言語の正規表現に関する高度なチュートリアル: アサーション条件の使用方法

Go 言語では、正規表現は強力で柔軟なテキスト マッチング ツールです。テキストの検索、抽出、置換に使用できます。前のチュートリアルでは、文字クラス、数量指定子、バックスラッシュのエスケープなどの正規表現の基本を学習しました。今日は、正規表現のより高度なテクニックの 1 つであるアサーション条件について詳しく見ていきます。

正規表現では、アサーション条件 (ルックアラウンド アサーション) は、一致する位置が特定の条件を満たすかどうかを判断するために使用される非キャプチャ一致です。アサーション条件には、肯定的なアサーション (Positive Lookahead) と否定的なアサーション (Negative Lookahead) の 2 種類があります。肯定的なアサーションは特定の条件を満たす位置の一致に使用され、否定的なアサーションは特定の条件を満たさない位置の一致に使用されます。

アサーション条件を使用したサンプル コードを次に示します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "hello, world! Go is awesome."

    // 正向断言示例:匹配含有"Go"的单词
    re1 := regexp.MustCompile(`w+(?=Go)`)
    fmt.Println(re1.FindAllString(str, -1)) // Output: [Go]

    // 正向断言示例:匹配含有"[aeiou]"之后的字母
    re2 := regexp.MustCompile(`[aeiou](?=[a-z])`)
    fmt.Println(re2.FindAllString(str, -1)) // Output: [o, o, i, i, a]

    // 负向断言示例:匹配不含有"world"的单词
    re3 := regexp.MustCompile(`w+(?<!world)`)
    fmt.Println(re3.FindAllString(str, -1)) // Output: [hello,, Go, is, awesome.]

    // 负向断言示例:匹配不含有"[123]"之后的数字
    re4 := regexp.MustCompile(`d(?![123])`)
    fmt.Println(re4.FindAllString(str, -1)) // Output: [4]
}

このサンプル コードでは、regexp.MustCompile 関数を使用して、正規表現を にコンパイルします。 *regexp.Regexpオブジェクト。次に、FindAllString メソッドを使用して、指定された文字列内の正規表現に一致するものをすべて検索します。

この例の最初の肯定的なアサーション正規表現は、 w (?=Go ) です。このうち、 は単語の境界に一致するメタ文字、w は 1 つ以上の文字、数字、またはアンダースコアに一致することを意味し、(?=Go) は前に検索することを意味します。 「Go」が後に続く単語に一致します。この正規表現を実行すると、文字列に「Go」を含む単語が取得されます。

2 番目の肯定的なアサーションの正規表現は [aeiou](?=[a-z]) です。このうち、[aeiou] は母音の一致を意味し、(?=[a-z]) は母音の後に小文字が続く前方検索を意味します。この正規表現を実行すると、文字列内の「[aeiou]」以降の文字が取得されます。

最初の否定アサーション正規表現は w (?<!world) です。このうち (?<!world) は前方否定検索を意味し、「world」で終わらない単語を一致させます。この正規表現を実行すると、文字列に「world」を含まない単語が取得されます。

2 番目の否定アサーション正規表現は d(?![123]) です。このうち、d は数値の一致を意味し、(?![123]) は前方否定検索を意味し、「[123]」で終わらない数値を一致させます。この正規表現を実行すると、文字列に「[123]」の後に数字が含まれていないことがわかります。

これらのサンプル コードを通じて、アサーション条件の使用方法の基本を理解する必要があります。アサート条件は、特定の条件に基づいてテキストを照合する必要がある場合に非常に便利なツールです。 Go 言語では、肯定的なアサーションは (?=pattern) 構文を使用し、否定的なアサーションは (?<!pattern) 構文を使用することを覚えておいてください。柔軟に適用されること。

このチュートリアルが、正規表現におけるアサーション条件の理解を深め、適用するのに役立つことを願っています。次のチュートリアルでは、引き続き Go 言語の正規表現のその他の高度なテクニックを紹介します。乞うご期待!

以上がGo 言語の正規表現に関する高度なチュートリアル: アサーション条件の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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