検索と抽出
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フィードバックを取得できます。ローカル設定は不要です。