看下表
| . | 匹配除了新行之外的任何字符 | 
| [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来确定大小。