看下表
. | 匹配除了新行之外的任何字符 |
[xyz] | |
[^A-Z\n] | |
r* | 匹配0次或多次r |
r+ | 匹配一次或多次r |
r? | 匹配0次或1次r |
r{2,5} | 匹配2次到5次 |
r{2,} | 匹配2次及以上 |
r{4} | 匹配4次 |
{name} | 扩展name的定义 |
"[xyz]\"foo" | 匹配字符串字面量[xy]"foo |
\x | x是a b f n r t v 匹配\n等特殊字符 |
\0 | 匹配NUL字符 |
\123 | 匹配8进制字符123 |
\x2a | 匹配16进制字符2a |
(r) | 匹配r,圆括号用来修改优先级 |
(?r-s:pattern) | 应用选项r,去掉选项s,匹配pattern的时候。 i 忽略大小写 s 让.匹配任何单字节 x 忽略pattern中的空白字符和注释,/* 注释 */ |
(?# comment) | 忽略comment |
r|s | r或者s |
r/s | 当r后跟着s时才匹配r |
^r | 匹配行开头的r |
r$ | 匹配行尾的r |
<s>r | 匹配start condition s中的r |
<s1,s2,s3>r | |
<*>r | 任何start conditon中的r |
<<EOF>> | 匹配文件结尾 |
<s1,s2><<EOF>> | start condition s1或s2中的end of file |
还有这些特殊的字符集
[:alnum:]
[:cntrl:]
[:lower:]
[:space:]
[:alpha:]
[:digit:]
[:print:]
[:upper:]
[:blank:]
[:graph:]
[:punct:]
[:xdigit:]
{-} 表示两个集合的差异,如[a-c]{-}[b-z],表示在a-c中,但不在b-z中的字符。
如果有多个匹配,则匹配最长的,如果长度相同,则匹配先出现的规则。
一旦一个匹配确定,yytext指向匹配的字符串,yyleng表示它的长度。规则action被执行。
如果没有匹配,则执行默认规则,它打印到标准输出。
yytext可以定义成指针或者数组。通过第一个section的特殊指令:
%pointer
%array
使用指针的缺点是你需要使用unput()来释放。
数组通过宏YYLMAX来确定大小。