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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- regexpの基礎
- 検索と抽出
- テキストの置換
- パフォーマンスのヒント