0Pricing
Go Academy · レッスン

検索と抽出

FindStringとサブマッチを使用します

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

マッチングの先へ

マッチングによって、パターンが存在するかどうかがわかります。Find系のメソッドを使うと、マッチした内容と位置がわかるため、データを抽出できます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindString("order 42 ready"))
}

FindString

FindString(s)は、最初に見つかったマッチを文字列として返します。マッチがない場合は空文字列を返します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    fmt.Printf("%q\n", re.FindString("123abc456"))
}

FindAllString

FindAllString(s, n)は、すべてのマッチをスライスとして返します。すべてのマッチを取得するには-1を渡し、正の値を渡すと取得数を制限できます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("a1 b22 c333", -1))
}

結果の制限

正のnを渡すと、その数のマッチを取得した時点で停止します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("1 2 3 4", 2))
}

インデックスの取得

FindStringIndex(s)は、最初に見つかったマッチの開始位置と終了位置をバイト単位で、2要素のスライスとして返します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("cat")
    fmt.Println(re.FindStringIndex("a cat here"))
}

キャプチャグループ

かっこを使うとキャプチャグループを作成できます。FindStringSubmatchは、最初にマッチ全体を返し、その後に各キャプチャグループを返します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)-(\\d+)")
    m := re.FindStringSubmatch("12-34")
    fmt.Println(m)
}

サブマッチの値を使う

サブマッチのスライスをインデックスで参照します。要素0はマッチ全体、要素1は最初のグループ、以降も同様です。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+):(\\d+)")
    m := re.FindStringSubmatch("09:30")
    fmt.Println("hour", m[1], "min", m[2])
}

名前付きグループ

(?P<name>...)でグループに名前を付け、サブマッチのスライスとともにSubexpNamesから名前を使って読み取ります。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?P<area>\\d{3})-(?P<num>\\d{4})")
    m := re.FindStringSubmatch("555-1234")
    for i, name := range re.SubexpNames() {
        if name != "" {
            fmt.Println(name, m[i])
        }
    }
}

すべてのサブマッチ

FindAllStringSubmatch(s, n)は、マッチごとに1つのサブマッチスライスを含むスライスを返します。多数のレコードのパースに適しています。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)=(\\d+)")
    all := re.FindAllStringSubmatch("x=1 y=2", -1)
    for _, m := range all {
        fmt.Println(m[1], m[2])
    }
}

マッチしない場合の動作

何もマッチしない場合、Find系のメソッドは空文字列またはnilスライスを返します。パニックを避けるため、インデックスで参照する前に確認してください。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    m := re.FindStringSubmatch("no digits")
    fmt.Println(m == nil)
}

実データの抽出

グループを組み合わせると、テキストの1行から構造化されたフィールドを取り出せます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d{4})-(\\d{2})-(\\d{2})")
    m := re.FindStringSubmatch("date: 2026-05-30")
    fmt.Println("year", m[1])
}

クイックチェック

サブマッチのスライスで、マッチ全体を表す要素はどれですか?

まとめ:検索と抽出

テキストからデータを取り出せるようになりました。

  • FindStringとFindAllStringはマッチを返します。
  • FindStringSubmatchは、マッチ全体とキャプチャグループを返します。
  • 名前付きグループを使用し、何もマッチしない場合はnilを確認します。
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)@(\\w+)")
    m := re.FindStringSubmatch("user@host")
    fmt.Println(m[1], "at", m[2])
}

よくある質問

「検索と抽出」レッスンは無料ですか?

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

「検索と抽出」で何を学びますか?

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

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

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

「検索と抽出」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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