RegexRule - activesys/alpaca-llama GitHub Wiki
alpaca正则表达式规范
alpaca并不打算识别所有的正则表达式的形式,它仅仅识别能够描述词法的最小的正则表达式集合,这个集合有可能在未来进行扩展。
alpaca采用ASCII字符编码表的基础表(0~127), 字符集是ASCII字符表中除了控制字符以外的所有可显式符号。
元字符在正则表达式中起到运算符号作用的字符,这些字符包括:
| * + ( ) \ . ^ [ ] -
当表达式中想描述这些字符本身的时候可以使用转移符号例如\表示本身,-和^只在[]内有效,^只有在[后面才有效,-^在[]外无效。|*+().在[]中无效。[]中包含的范围的形式如a-b,其中a<b,并且助记符不能够出现在a或b中。
与: abc
或: a|b|c或者[abc]
非: [^a]
闭包: a*或者b+
分组: (ab)|(cd)
缩略表示: \a \b \f \n \r \t \v \c
助记符: \d=[0-9] \D=[^\d] \w=[a-zA-Z0-9_] \W=[^\w] \s=[ \f\n\r\t\v] \S=[^\s] \l=[a-z] \C=[A-Z]
\c表示空格
operator ::= \| | \* | \+ | \ ( | \ ) | \\ | \. | \^ | \ [ | \ ] | \-
number ::= [0-9]
letter ::= [a-zA-Z]
char ::= ! | " | # | $ | % | & | ' | , | / | : | ; | < | = | > | ? | @ | _ | ` | { | } | ~
escape ::= \\$operator$
abbreviation ::= \\a | \\b | \\f | \\n | \\r | \\t | \\v | \\c
mnemonic ::= \\d | \\D | \\w | \\W | \\s | \\S | \\l | \\C
operand ::=
REGEX ::= UNION | SIMPLE
UNION ::= REGEX '|' SIMPLE
SIMPLE ::= CONCATENATION | BASIC
CONCATENATION ::= SIMPLE BASIC
BASIC ::= KLEENE_CLOSURE | POSITIVE_CLOSURE | ELEMENTARY
KLEENE_CLOSURE ::= ELEMENTARY '*'
POSITIVE_CLOSURE ::= ELEMENTARY '+'
ELEMENTARY ::= GROUP | '.' | operand | SET
GROUP ::= '(' REGEX ')'
SET ::= POSITIVE_SET | NEGATIVE_SET
POSITIVE_SET ::= '[' ITEMS ']'
NEGATIVE_SET ::= '[' '^' ITEMS ']'
ITEMS ::= ITEM | ITEM ITEMS
ITEM ::= RANGE | operand
RANGE ::= operand '-' operand