import "regexp"

regexpパッケージは、シンプルな正規表現ライブラリを実装しています。

対応している正規表現の構文:

regexp:
	concatenation { '|' concatenation }
concatenation:
	{ closure }
closure:
	term [ '*' | '+' | '?' ]
term:
	'^'
	'$'
	'.'
	character
	'[' [ '^' ] { character-ranges } ']'
	'(' regexp ')'
character-range:
	character [ '-' character ]

characterはすべて、UTF-8エンコードされたコードポイントです。バックスラッシュは、特殊文字をエスケープし、キャラクタクラス内でも使用されます。Go言語標準の文字エスケープも同様に認識されます。 : \a \b \f \n \r \t \v.

Regexpの16個のメソッドは、正規表現とのマッチング、および一致したテキストの識別を行ないます。これらメソッドの名前は、次の正規表現と一致します。

Find(All)?(String)?(Submatch)?(Index)?

メソッド名に「All」が付くルーチンは、表現全体と一致するものを重複なく、順番通りに返します。一致した空文字列が、直前に一致した箇所と隣接しているときは無視されます。戻り値はスライスで、このルーチンと対応する「非All」ルーチンの戻り値が順番に格納されます。これらのメソッドは別途、整数型の引数nを取ります。n >= 0のとき、この関数は最大でn個と一致/部分一致します。

メソッド名に「String」が付く場合は、引数は文字列型で、その他はバイト型のスライスです。戻り値は、適切になるよう調整されます。

メソッド名に「Submatch」が付く場合は、戻り値はスライスで、表現と部分一致するものを順番通りに格納したものです。部分一致とは、正規表現内の、カッコで囲まれた部分表現との一致のことで、括弧の開始順に、左から右に数えられます。部分一致0は、表現全体との一致であり、部分一致1は、最初のカッコの部分表現との一致です。以下同様に続きます。

メソッド名に「Index」が付く場合の一致/部分一致の結果は、入力文字列のバイトインデックスのペアです。結果[2*n:2*n+1]は、n番目の部分一致のインデックスです。n == 0のときは、表現全体との一致です。メソッドに「Index」が付かないとき、一致の結果は、一致/部分一致したテキストです。インデックスがマイナス値のときは、入力のどの文字列とも部分表現が一致しなかったことを意味します。

(このパターンに一致しないメソッドも若干あります。)

パッケージファイル

regexp.go

変数

正規表現式の解析エラーで返されるエラーコード。

var (
    ErrInternal            = Error("internal error")
    ErrUnmatchedLpar       = Error("unmatched '('")
    ErrUnmatchedRpar       = Error("unmatched ')'")
    ErrUnmatchedLbkt       = Error("unmatched '['")
    ErrUnmatchedRbkt       = Error("unmatched ']'")
    ErrBadRange            = Error("bad range in character class")
    ErrExtraneousBackslash = Error("extraneous backslash")
    ErrBadClosure          = Error("repeated closure (**, ++, etc.)")
    ErrBareClosure         = Error("closure applies to nothing")
    ErrBadBackslash        = Error("illegal backslash escape")
)

Match関数

func Match(pattern string, b []byte) (matched bool, error os.Error)

Matchは、正規表現文字列がバイトスライスと一致するか調べます。より複雑な問合せにはCompileとRegexpインタフェースを活用する必要があります。

MatchString関数

func MatchString(pattern string, s string) (matched bool, error os.Error)

MatchStringは、正規表現文字列が文字列sと一致するか調べます。より複雑な問合せにはCompileとRegexpインタフェースを活用する必要があります。

QuoteMeta関数

func QuoteMeta(s string) string

QuoteMetaは、引数の文字列内にある正規表現のメタ文字をすべてエスケープした文字列を返します。返される文字列は元の文字列に一致する正規表現式です。例として、QuoteMeta(`[foo]`)は`\[foo\]`を返します。

Error型

Errorは、解析エラー用のローカルな型です。

type Error string

(Error) String関数

func (e Error) String() string

Regexp型

Regexpは、コンパイル済み正規表現を表します。この型のパブリックなインタフェースはすべてメソッド経由です。

type Regexp struct {
    // contains unexported fields
}

Compile関数

func Compile(str string) (regexp *Regexp, error os.Error)

Compileは、正規表現を解析します。成功するとテキストと比較できるRegexpオブジェクトを返します。

MustCompile関数

func MustCompile(str string) *Regexp

MustCompileは、Compileと似ていますが正規表現の解析に失敗したときはpanicを起こします。これはコンパイル済みの正規表現を持つグローバル変数を安全に初期化するときに役立ちます。

(*Regexp) Find関数

func (re *Regexp) Find(b []byte) []byte

Findは、b内で正規表現に一致する一番左のテキストを保持するスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAll関数

func (re *Regexp) FindAll(b []byte, n int) [][]byte

FindAllは、Findの「All」版です。パッケージコメントの「All」の説明で定義されているように、この関数は表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllIndex関数

func (re *Regexp) FindAllIndex(b []byte, n int) [][]int

FindAllIndexは、FindIndexの「All」版です。パッケージコメントの「All」の説明で定義されているように、この関数は表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllString関数

func (re *Regexp) FindAllString(s string, n int) []string

FindAllStringは、FindStringの「All」版です。パッケージコメントの「All」の説明で定義されているように、表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllStringIndex関数

func (re *Regexp) FindAllStringIndex(s string, n int) [][]int

FindAllStringIndexは、FindStringIndexの「All」版です。パッケージコメントの「All」の説明で定義されているように、表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllStringSubmatch関数

func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string

FindAllStringSubmatchは、FindStringSubmatchの「All」版です。パッケージコメントの「All」の説明で定義されているよ うに、表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllStringSubmatchIndex関数

func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int

FindAllStringSubmatchIndexは、FindStringSubmatchIndexの「All」版です。パッケージコメントの「All」の説明で定義されているよ うに、表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllSubmatch関数

func (re *Regexp) FindAllSubmatch(b []byte, n int) [][][]byte

FindAllSubmatchは、FindSubmatchの「All」版です。パッケージコメントの「All」の説明で定義されているよ うに、表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindAllSubmatchIndex関数

func (re *Regexp) FindAllSubmatchIndex(b []byte, n int) [][]int

FindAllSubmatchIndexは、FindSubmatchIndexの「All」版です。パッケージコメントの「All」の説明で定義されているよ うに、表現と一致したすべてを順番通りに格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindIndex関数

func (re *Regexp) FindIndex(b []byte) (loc []int)

FindIndexは、b内で正規表現に一致する一番左の位置を示す2つの整数を格納したスライスを返します。一致した個所はb[loc[0]:loc[1]]です。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindString関数

func (re *Regexp) FindString(s string) string

FindStringは、s内で正規表現に一致する一番左のテキストを保持する文字列を返します。一致しなかったときは空文字列が返されますが、正規表現が空文字列と一致したときも同様に、空文字列が返されます。これらを判別する必要があれば、FindStringIndexまたは、FindStringSubmatchを使ってください。

(*Regexp) FindStringIndex関数

func (re *Regexp) FindStringIndex(s string) []int

FindIndexは、s内で正規表現に一致する一番左の位置を示す2つの整数を格納したスライスを返します。一致した個所はs[loc[0]:loc[1]]です。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindStringSubmatch関数

func (re *Regexp) FindStringSubmatch(s string) []string

FindStringSubmatchは、s内で正規表現に一致する一番左のテキストと、パッケージコメントの「Submatch」の説明で定義されているよ うに、その中で部分表現と一致するテキストがあれば、それらを保持するスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindStringSubmatchIndex関数

func (re *Regexp) FindStringSubmatchIndex(s string) []int

FindStringSubmatchIndexは、s内で正規表現に致する一番左のテキストと、パッケージコメントの「Submatch」の説明で定義されているよ うに、その中で部分表現と一致するテキストがあれば、それらの位置を示すペアの整数を格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindSubmatch関数

func (re *Regexp) FindSubmatch(b []byte) [][]byte

FindSubmatchは、b内で正規表現に一致する一番左のテキストと、パッケージコメントの「Submatch」の説明で定義されているよ うに、その中で部分表現と一致するテキストがあれば、それらを保持するスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) FindSubmatchIndex関数

func (re *Regexp) FindSubmatchIndex(b []byte) []int

FindSubmatchIndexは、b内で正規表現に致する一番左のテキストと、パッケージコメントの「Submatch」の説明で定義されているよ うに、その中で部分表現と一致するテキストがあれば、それらの位置を示すペアの整数を格納したスライスを返します。nilが返されたときは、一致しなかったことを表します。

(*Regexp) Match関数

func (re *Regexp) Match(b []byte) bool

Matchは、バイトスライスbがRegexpと一致するかどうかを返します。戻り値は論理値型で、trueは一致、falseは不一致です。

(*Regexp) MatchString関数

func (re *Regexp) MatchString(s string) bool

MatchStringは、文字列sがRegexpと一致するかどうかを返します。戻り値は論理値型で、trueは一致、falseは不一致です。

(*Regexp) NumSubexp関数

func (re *Regexp) NumSubexp() int

NumSubexpは、Regexp内の丸括弧で囲まれたサブパターンの数を返します。

(*Regexp) ReplaceAll関数

func (re *Regexp) ReplaceAll(src, repl []byte) []byte

ReplaceAllは、srcのRegexpと一致するすべての箇所をreplで置換したコピーを返します。置き換える文字列では、式(例:\1 or $1)はサポートしていません。

(*Regexp) ReplaceAllFunc関数

func (re *Regexp) ReplaceAllFunc(src []byte, repl func([]byte) []byte) []byte

ReplaceAllFuncは、srcのRegexpと一致するすべての箇所をrepl関数(引数は一致した[]byte)の戻り値で置換したコピーを返します。置き換える文字列では、式(例:\1 or $1)はサポートしていません。

(*Regexp) ReplaceAllString関数

func (re *Regexp) ReplaceAllString(src, repl string) string

ReplaceAllStringは、srcのRegexpと一致するすべての箇所をreplで置換したコピーを返します。置き換える文字列では、式(例:\1 or $1)はサポートしていません。

(*Regexp) ReplaceAllStringFunc関数

func (re *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) string

ReplaceAllStringFuncは、srcのRegexpと一致するすべての箇所をrepl関数(引数は一致したstring)の戻り値で置換したコピーを返します。置き換える文字列では、式(例:\1 or $1)はサポートしていません。