Documentation
¶
Overview ¶
パッケージ構文は正規表現を解析木に解析し、解析木をプログラムにコンパイルします。通常、正規表現のクライアントはこのパッケージではなく、regexpパッケージ(CompileやMatchなど)の機能を使用します。
# 構文
Perlフラグを使用して解析する場合、このパッケージが理解する正規表現の構文は次のとおりです。Parseに代替フラグを渡すことで、構文の一部を無効にすることもできます。
単一の文字:
. 任意の文字を含む文字(改行も含む)(フラグs=true) [xyz] 文字クラス [^xyz] 否定文字クラス \d Perl文字クラス \D 否定Perl文字クラス [[:alpha:]] ASCII文字クラス [[:^alpha:]] 否定ASCII文字クラス \pN Unicode文字クラス(一文字の名前) \p{Greek} Unicode文字クラス \PN 否定Unicode文字クラス(一文字の名前) \P{Greek} 否定Unicode文字クラス
複合:
xy xの後にy x|y xまたはy(xを優先)
繰り返し:
x* xを0回以上、できれば多くの回繰り返す x+ xを1回以上、できれば多くの回繰り返す x? xを0回または1回、できれば1回繰り返す x{n,m} nまたはn+1または...またはm個のxを、できれば多くの回繰り返す x{n,} n個以上のxを、できれば多くの回繰り返す x{n} 正確にn個のx x*? xを0回以上、できれば少ない回繰り返す x+? xを1回以上、できれば少ない回繰り返す x?? xを0回または1回、できれば0回繰り返す x{n,m}? nまたはn+1または...またはm個のxを、できれば少ない回繰り返す x{n,}? n個以上のxを、できれば少ない回繰り返す x{n}? 正確にn個のx
実装の制約:x{n,m}、x{n,}、およびx{n}の計数形式は、最小または最大の反復回数が1000を超える形式を拒否します。制限は無制限の繰り返しには適用されません。
グループ化:
(re) 番号付きのキャプチャグループ(サブマッチ) (?P<name>re) 名前付き&番号付きのキャプチャグループ(サブマッチ) (?:re) キャプチャしないグループ (?flags) 現在のグループ内でフラグを設定する;キャプチャしない (?flags:re) re中にフラグを設定する;キャプチャしない
フラグの構文はxyz(設定)または-xyz(解除)またはxyz(設定)-z(解除)です。フラグは次のとおりです:
i 大文字小文字を区別しない(デフォルトはfalse) m マルチラインモード:~、$はテキストの始まり/終わりに加えて行の始まり/終わりにもマッチする(デフォルトはfalse) s .が\nにもマッチする(デフォルトはfalse) U マッチングの優先度を反転させる:x*とx*?やx+とx+?などの意味を入れ替える(デフォルトはfalse)
空の文字列:
^ テキストまたは行の先頭(フラグm=true) $ テキストの終わり(\zではなく)または行の終わり(フラグm=true) \A テキストの先頭 \b ASCIIの単語の境界(片側は\w、他側は\W、\A、または\z) \B ASCIIの単語の境界ではない \z テキストの終わり
エスケープシーケンス:
\a ベル(== \007) \f 改ページ(== \014) \t 水平タブ(== \011) \n 改行(== \012) \r キャリッジリターン(== \015) \v 垂直タブ文字(== \013) \* リテラルの*(任意の句読点文字用) \123 8進数の文字コード(最大3桁まで) \x7F 16進数の文字コード(正確に2桁) \x{10FFFF} 16進数の文字コード \Q...\E 句読点を含む場合でも、リテラルのテキスト...
文字クラス要素:
x 単一の文字 A-Z 文字範囲(包括的) \d Perl文字クラス [:foo:] ASCII文字クラスfoo \p{Foo} Unicode文字クラスFoo \pF Unicode文字クラスF(一文字の名前)
文字クラス要素としての名前付き文字クラス:
[\d] 数字(== \d) [^\d] 数字以外(== \D) [\D] 数字以外(== \D) [^\D] 英数字以外(== \d) [[:name:]] 文字クラス[:name:]内の名前付きASCIIクラス(== [:name:]) [^[:name:]] 否定文字クラス[:name:]内の名前付きASCIIクラス(== [:^name:]) [\p{Name}] 文字クラス内の名前付きUnicodeプロパティ(== \p{Name}) [^\p{Name}] 否定文字クラス内の名前付きUnicodeプロパティ(== \P{Name})
Perl文字クラス(すべてASCIIのみ):
\d 数字(== [0-9]) \D 数字以外(== [^0-9]) \s 空白(== [\t\n\f\r ]) \S 空白以外(== [^\t\n\f\r ]) \w 単語の文字(== [0-9A-Za-z_]) \W 単語の文字以外(== [^0-9A-Za-z_])
ASCII文字クラス:
[[:alnum:]] 英数字(== [0-9A-Za-z]) [[:alpha:]] 英字(== [A-Za-z]) [[:ascii:]] ASCII(== [\x00-\x7F]) [[:blank:]] 空白(== [\t ]) [[:cntrl:]] 制御文字(== [\x00-\x1F\x7F]) [[:digit:]] 数字(== [0-9]) [[:graph:]] グラフィカル(== [!-~] == [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]) [[:lower:]] 小文字(== [a-z]) [[:print:]] 印刷可能(== [ -~] == [ [:graph:]]) [[:punct:]] 句読点(== [!-/:-@[-`{-~]) [[:space:]] 空白(== [\t\n\v\f\r ]) [[:upper:]] 大文字(== [A-Z]) [[:word:]] 単語の文字(== [0-9A-Za-z_]) [[:xdigit:]] 16進数の数字(== [0-9A-Fa-f])
Unicode文字クラスは、unicode.Categoriesおよびunicode.Scriptsのものです。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsWordChar ¶
IsWordCharは、\bおよび\Bゼロ幅のアサーションの評価中にrが「単語文字」と見なされるかどうかを報告します。 これらのアサーションはASCIIのみです:単語文字は[A-Za-z0-9_]です。
Types ¶
type EmptyOp ¶
type EmptyOp uint8
EmptyOpは、ゼロ幅アサーションの種類または混合を指定します。
func EmptyOpContext ¶
EmptyOpContextは、r1とr2のルーンの間の位置で満たされる ゼロ幅のアサーションを返します。 r1 == -1を渡すと、位置がテキストの先頭にあることを示します。 r2 == -1を渡すと、位置がテキストの末尾にあることを示します。
type ErrorCode ¶
type ErrorCode string
「ErrorCode」は正規表現の解析に失敗したことを説明します。
const ( // 予期しないエラー ErrInternalError ErrorCode = "regexp/syntax: internal error" // パースエラー ErrInvalidCharClass ErrorCode = "invalid character class" ErrInvalidCharRange ErrorCode = "invalid character class range" ErrInvalidEscape ErrorCode = "invalid escape sequence" ErrInvalidNamedCapture ErrorCode = "invalid named capture" ErrInvalidPerlOp ErrorCode = "invalid or unsupported Perl syntax" ErrInvalidRepeatOp ErrorCode = "invalid nested repetition operator" ErrInvalidRepeatSize ErrorCode = "invalid repeat count" ErrInvalidUTF8 ErrorCode = "invalid UTF-8" ErrMissingBracket ErrorCode = "missing closing ]" ErrMissingParen ErrorCode = "missing closing )" ErrMissingRepeatArgument ErrorCode = "missing argument to repetition operator" ErrTrailingBackslash ErrorCode = "trailing backslash at end of expression" ErrUnexpectedParen ErrorCode = "unexpected )" ErrNestingDepth ErrorCode = "expression nests too deeply" ErrLarge ErrorCode = "expression too large" )
type Inst ¶
Instは正規表現プログラム内の単一の命令です。
func (*Inst) MatchEmptyWidth ¶
MatchEmptyWidthは、runesの前と後の間に空の文字列が マッチしているかどうかを報告します。 i.Op == InstEmptyWidthの場合にのみ呼び出すべきです。
func (*Inst) MatchRune ¶
MatchRune は指定した r に instruction が一致し、それを消費するかどうかを報告します。 i.Op == InstRune の場合にのみ呼び出すべきです。
func (*Inst) MatchRunePos ¶ added in v1.3.0
MatchRunePosは、命令がrと一致しているかどうか(そして消費するかどうか)を確認します。 そうであれば、MatchRunePosは一致するルーンのペアのインデックスを返します (または、len(i.Rune) == 1の場合、ルーンの単一要素)。 一致しない場合、MatchRunePosは-1を返します。 MatchRunePosは、i.Op == InstRuneの場合のみ呼び出す必要があります。
type Prog ¶
Progはコンパイルされた正規表現プログラムです。
func (*Prog) Prefix ¶
Prefix は正規表現のすべての一致した結果が始まるリテラル文字列を返します。もし Prefix が完全な一致である場合、Complete は true になります。
type Regexp ¶
type Regexp struct { Op Op Flags Flags Sub []*Regexp Sub0 [1]*Regexp Rune []rune Rune0 [2]rune Min, Max int Cap int Name string }
正規表現(RegExp)は正規表現構文木のノードです。
func (*Regexp) Simplify ¶
Simplify returns a regexp equivalent to re but without counted repetitions and with various other simplifications, such as rewriting /(?:a+)+/ to /a+/. The resulting regexp will execute correctly but its string representation will not produce the same parse tree, because capturing parentheses may have been duplicated or removed. For example, the simplified form for /(x){1,2}/ is /(x)(x)?/ but both parentheses capture as $1. The returned regexp may share structure with or be the original.