syntax
9 分钟阅读
Package syntax parses regular expressions into parse trees and compiles parse trees into programs. Most clients of regular expressions will use the facilities of package regexp (such as Compile and Match) instead of this package.
syntax 包将正则表达式解析为解析树,并将解析树编译为程序。大多数正则表达式的客户端将使用 regexp 包的工具(例如 Compile 和 Match)而不是此包。
语法 Syntax
The regular expression syntax understood by this package when parsing with the Perl flag is as follows. Parts of the syntax can be disabled by passing alternate flags to Parse.
当使用 Perl 标志进行解析时,此包理解的正则表达式语法如下。通过将替代标志传递给 Parse,可以禁用语法的某些部分。
Single characters:
单个字符:
. 任何字符,可能包括换行符(标志 s=true)
[xyz] 字符类
[^xyz] 反向字符类
\d Perl字符类
\D 反向 Perl 字符类
[[:alpha:]] ASCII 字符类
[[:^alpha:]] 反向 ASCII 字符类
\pN Unicode 字符类(单字母名称)
\p{Greek} Unicode 字符类
\PN 反向 Unicode 字符类(单字母名称)
\P{Greek} 反向 Unicode 字符类
Composites:
复合:
xy x 后跟 y
x|y x 或 y(更偏向于 x)
Repetitions:
重复:
x* 零个或多个 x,更偏向于多个
x+ 一个或多个 x,更偏向于多个
x? 零个或一个 x,更偏向于一个
x{n,m} n 或 n+1 或 ... 或 m 个 x,更偏向于多个
x{n,} n 或更多个 x,更偏向于多个
x{n} 恰好 n 个 x
x*? 零个或多个 x,更偏向于较少
x+? 一个或多个 x,更偏向于较少
x?? 零个或一个 x,更偏向于零
x{n,m}? n 或 n+1 或 ... 或 m 个 x,更偏向于较少
x{n,}? n 或更多个 x,更偏向于较少
x{n}? 恰好 n 个 x
Implementation restriction: The counting forms x{n,m}, x{n,}, and x{n} reject forms that create a minimum or maximum repetition count above 1000. Unlimited repetitions are not subject to this restriction.
实现限制:计数形式 x{n,m}
、x{n,}
和 x{n}
拒绝创建最小或最大重复计数大于 1000 的形式。无限重复不受此限制。
Grouping:
分组:
(re) 编号捕获组(子匹配)
(?P<name>re) 命名和编号捕获组(子匹配)
(?:re) 非捕获组
(?flags) 在当前组内设置标志;非捕获
(?flags:re) 在 re 中设置标志;非捕获
标志语法为 xyz(设置)或 -xyz(清除)或 xy-z(设置 xy,清除 z)。
标志包括:
i 不区分大小写(默认为 false)
m 多行模式:^ 和 $ 匹配行的开头和结尾以及文本的开头和结尾(默认为 false)
s 让 . 匹配 \n(默认为 false)
U 非贪婪模式:交换 x* 和 x*?x+ 和 x+?等的含义(默认为 false)
Empty strings:
空字符串:
^ 文本或行的开头(标志 m=true)
$ 文本的结尾(类似于 \z 而不是 \Z)或行的结尾(标志 m=true)
\A 文本的开头
\b ASCII 单词边界(\w 在一侧,\W、\A 或 \z 在另一侧)
\B 非 ASCII 单词边界
\z 文本的结尾
Escape sequences:
转义序列:
\a 响铃(== \007)
\f 换页符(== \014)
\t 水平制表符(== \011)
\n 换行符(== \012)
\r 回车符(== \015)
\v 垂直制表符(== \013)
\* 字符 *(对于任何标点符号字符 * 都是字面量)
\123 八进制字符代码(最多三位数字)
\x7F 十六进制字符代码(恰好两位数字)
\x{10FFFF} 十六进制字符代码
\Q...\E 字面文本...即使...中有标点符号
Character class elements:
字符类元素:
x 单个字符
A-Z 字符范围(包括)
\d Perl 字符类
[:foo:] ASCII 字符类 foo
\p{Foo} Unicode 字符类 Foo
\pF 字符类 F(一个字母名称)
Named character classes as character class elements:
命名字符类作为字符类元素:
[\d] 数字(== \d)
[^\d] 非数字(== \D)
[\D] 非数字(== \D)
[^\D] 非非数字(== \d)
[[:name:]] 字符类内部的命名 ASCII 类(== [:name:])
[^[:name:]] 在否定字符类中命名 ASCII 类(== [:^name:])
[\p{Name}] 字符类内的命名 Unicode 属性(== \p{Name})
[^\p{Name}] 在否定字符类中的命名 Unicode 属性(== \P{Name})
Perl character classes (all ASCII-only):
Perl字符类(仅ASCII):
\d 数字(== [0-9])
\D 非数字(== [^0-9])
\s 空格字符(== [\t\n\f\r ])
\S 非空格字符
\w 单词字符 (== [0-9A-Za-z_])
\W 非单词字符 (== [^0-9A-Za-z_])
ASCII character classes:
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:]] punctuation (== [!-/:-@[-`{-~]) 标点符号 (== [!-/:-@[-`{-~] )
[[:space:]] 空格字符 (== [\t\n\v\f\r])
[[:upper:]] 大写字母 (== [A-Z]) 大写 (== [A-Z])
[[:word:]] 单词字符 (== [0-9A-Za-z_])
[[:xdigit:]] 十六进制数字 (== [0-9A-Fa-f])
Unicode character classes are those in unicode.Categories and unicode.Scripts.
Unicode字符类包括unicode.Categories和unicode.Scripts中的类别。
常量
This section is empty.
变量
This section is empty.
函数
func IsWordChar
|
|
IsWordChar reports whether r is considered a “word character” during the evaluation of the \b and \B zero-width assertions. These assertions are ASCII-only: the word characters are [A-Za-z0-9_].
IsWordChar
函数报告 r 是否在评估 \b 和 \B 零宽断言期间被认为是"单词字符"。这些断言仅适用于 ASCII:单词字符是 [A-Za-z0-9_]
。
类型
type EmptyOp
|
|
An EmptyOp specifies a kind or mixture of zero-width assertions.
EmptyOp
指定零宽断言的一种或多种种类。
|
|
func EmptyOpContext
|
|
EmptyOpContext returns the zero-width assertions satisfied at the position between the runes r1 and r2. Passing r1 == -1 indicates that the position is at the beginning of the text. Passing r2 == -1 indicates that the position is at the end of the text.
EmptyOpContext
函数返回在符文 r1 和 r2 之间位置的满足零宽断言的内容。传递 r1 == -1 表示位置位于文本开头。传递 r2 == -1 表示位置位于文本末尾。
type Error
|
|
An Error describes a failure to parse a regular expression and gives the offending expression.
Error
结构体描述了无法解析正则表达式的失败,并提供了出错的表达式。
(*Error) Error
|
|
type ErrorCode
|
|
An ErrorCode describes a failure to parse a regular expression.
ErrorCode
描述了无法解析正则表达式的失败。
|
|
(ErrorCode) String
|
|
type Flags
|
|
Flags control the behavior of the parser and record information about regexp context.
Flags
控制解析器的行为并记录有关正则表达式上下文的信息。
|
|
type Inst
|
|
An Inst is a single instruction in a regular expression program.
Inst
是正则表达式程序中的单个指令。
(*Inst) MatchEmptyWidth
|
|
MatchEmptyWidth reports whether the instruction matches an empty string between the runes before and after. It should only be called when i.Op == InstEmptyWidth.
MatchEmptyWidth
方法报告指令是否在before和after之间匹配空字符串。仅在i.Op == InstEmptyWidth时才应调用它。
(*Inst) MatchRune
|
|
MatchRune reports whether the instruction matches (and consumes) r. It should only be called when i.Op == InstRune.
MatchRune
方法报告指令是否与r匹配(并消耗r)。仅在i.Op == InstRune时才应调用它。
(*Inst) MatchRunePos <- go1.3
|
|
MatchRunePos checks whether the instruction matches (and consumes) r. If so, MatchRunePos returns the index of the matching rune pair (or, when len(i.Rune) == 1, rune singleton). If not, MatchRunePos returns -1. MatchRunePos should only be called when i.Op == InstRune.
MatchRunePos
方法检查指令是否与r匹配(并消耗r)。如果是,则MatchRunePos返回匹配符号对的索引(或者当len(i.Rune) == 1时,返回符号单例)。如果不是,则MatchRunePos返回-1。MatchRunePos仅在i.Op == InstRune时应调用。
(*Inst) String
|
|
type InstOp
|
|
An InstOp is an instruction opcode.
InstOp是一个指令操作码。
|
|
(InstOp) String <- go1.3
|
|
type Op
|
|
An Op is a single regular expression operator.
一个Op是一个单一的正则表达式运算符。
|
|
(Op) String <- go1.11
|
|
type Prog
|
|
A Prog is a compiled regular expression program.
一个Prog是一个已编译的正则表达式程序。
func Compile
|
|
Compile compiles the regexp into a program to be executed. The regexp should have been simplified already (returned from re.Simplify).
Compile
方法将正则表达式编译成可执行程序。 正则表达式应该已经被简化(从re.Simplify返回)。
(*Prog) Prefix
|
|
Prefix returns a literal string that all matches for the regexp must start with. Complete is true if the prefix is the entire match.
Prefix
方法返回一个字面字符串,该字符串是所有匹配该正则表达式的字符串必须以此开头。如果该字符串是整个匹配,则 complete 参数为 true。
(*Prog) StartCond
|
|
StartCond returns the leading empty-width conditions that must be true in any match. It returns ^EmptyOp(0) if no matches are possible.
StartCond
方法返回必须在任何匹配中为真的前导空宽度条件。如果没有匹配,则返回 ^EmptyOp(0)。
(*Prog) String
|
|
String
方法返回表示程序的字符串。
type Regexp
|
|
A Regexp is a node in a regular expression syntax tree.
Regexp结构体是正则表达式语法树中的一个节点。
func Parse
|
|
Parse parses a regular expression string s, controlled by the specified Flags, and returns a regular expression parse tree. The syntax is described in the top-level comment.
Parse
方法解析一个受 flags 控制的正则表达式字符串 s,并返回一个正则表达式语法树。语法在顶层注释中描述。
(*Regexp) CapNames
|
|
CapNames walks the regexp to find the names of capturing groups.
CapNames
方法遍历正则表达式以查找捕获组的名称。
(*Regexp) Equal
|
|
Equal reports whether x and y have identical structure.
Equal
方法报告 x 和 y 是否具有相同的结构。
(*Regexp) MaxCap
|
|
MaxCap walks the regexp to find the maximum capture index.
MaxCap
方法遍历正则表达式以查找最大捕获索引。
(*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.
Simplify
方法返回等效于 re 的正则表达式,但不包括计数重复,并进行各种其他简化,例如将 /(?:a+)+/
重写为 /a+/
。生成的正则表达式将正确执行,但其字符串表示形式不会生成相同的解析树,因为捕获括号可能已复制或删除。例如,/(x){1,2}/
的简化形式是/(x)(x)?/
,但两个括号都捕获为 $1
。返回的正则表达式可能与原始表达式共享结构,也可能是原始表达式的副本。
(*Regexp) String
|
|