0Pricing
Go Academy · レッスン

regexpの基礎

パターンをコンパイルしてマッチさせます

「regexpの基礎」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

正規表現とは

正規表現(regexp)は、文字列の集合を表すパターンです。Goではregexpパッケージを通じて利用できます。

テキストの検証や検索に最適です。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    matched, _ := regexp.MatchString("go+", "gooo")
    fmt.Println(matched)
}

MatchStringによる簡単なマッチング

regexp.MatchString(pattern, s)は、sのどこかにパターンが現れるかどうかを示します。boolとエラーを返します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    ok, _ := regexp.MatchString("cat", "the cat sat")
    fmt.Println(ok)
}

パターンのコンパイル

繰り返し使用する場合は、regexp.Compileで一度だけコンパイルします。再利用可能な*regexp.Regexpと、パターンが無効な場合のエラーを返します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re, err := regexp.Compile("[0-9]+")
    fmt.Println(re.MatchString("abc123"), err)
}

定数にはMustCompile

regexp.MustCompileは、パターンが無効な場合にパニックを起こします。コンパイル時に固定されているパターン、通常はパッケージレベルの変数に使用します。

package main

import (
    "fmt"
    "regexp"
)

var digits = regexp.MustCompile("[0-9]+")

func main() {
    fmt.Println(digits.MatchString("order 42"))
}

文字クラス

角かっこは、使用可能な文字の集合を定義します。[aeiou]は任意の母音にマッチし、[a-z]のような範囲指定は文字の範囲にマッチします。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    fmt.Println(re.MatchString("Hello"))
}

定義済みクラス

ショートカットを使うと、よく使う集合を簡単に指定できます。\dは数字、\wは単語文字、\sは空白文字を表します。Goの文字列では、バックスラッシュをエスケープしてください。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("\\d+")
    fmt.Println(re.MatchString("abc 99"))
}

量指定子

量指定子は、出現回数を表します。

  • *は0回以上
  • +は1回以上
  • ?は0回または1回
  • {2,4}は範囲
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("a{2,3}")
    fmt.Println(re.MatchString("aaa"))
    fmt.Println(re.MatchString("a"))
}

アンカー

アンカーはマッチする位置を固定します。^はテキストの先頭、$は末尾を表します。両方を使うと、文字列全体のマッチを必須にできます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^go$")
    fmt.Println(re.MatchString("go"))
    fmt.Println(re.MatchString("going"))
}

選択とグループ

パイプ|はORを表し、かっこは要素をまとめます。(cat|dog)s?はcat、cats、dog、dogsにマッチします。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(cat|dog)s?")
    fmt.Println(re.MatchString("dogs"))
}

形式の検証

アンカー付きのパターンを使うと、バリデーターを作成できます。ここでは、5桁ちょうどの数字だけで構成された、単純なZIPコード形式のコードを検証します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^\\d{5}$")
    fmt.Println(re.MatchString("12345"))
    fmt.Println(re.MatchString("123"))
}

バイトに対するマッチング

メソッドには文字列用とバイトスライス用の形式があります。Matchは[]byteに対して動作し、MatchStringに対応します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.Match([]byte("id7")))
}

クイックチェック

無効なパターンでパニックを起こし、固定パターンに適している関数はどれですか?

まとめ:regexpの基礎

基本事項を学びました。

  • MatchStringで素早くマッチングし、CompileまたはMustCompileでコンパイルします。
  • 文字クラス、量指定子、アンカー、グループからパターンを組み立てます。
  • 文字列全体を検証するには、^と$でアンカーを指定します。
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("^[a-z]+@[a-z]+$")
    fmt.Println(re.MatchString("hi@host"))
}

よくある質問

「regexpの基礎」レッスンは無料ですか?

はい。「regexpの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「regexpの基礎」で何を学びますか?

パターンをコンパイルしてマッチさせます ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「regexpの基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. regexpの基礎
  2. 検索と抽出
  3. テキストの置換
  4. パフォーマンスのヒント
← Go Academyに戻る