ILD

Flex学习笔记1 Patterns
作者:YUAN JIANPENG 邮箱:yuanjp89@163.com
发布时间:2019-7-26 站点:Inside Linux Development

6 Patterns

看下表

.匹配除了新行之外的任何字符
[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

\xx是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中的字符。


7 How the Input Is Matched

如果有多个匹配,则匹配最长的,如果长度相同,则匹配先出现的规则。

一旦一个匹配确定,yytext指向匹配的字符串,yyleng表示它的长度。规则action被执行。

如果没有匹配,则执行默认规则,它打印到标准输出。


yytext可以定义成指针或者数组。通过第一个section的特殊指令:

%pointer

%array


使用指针的缺点是你需要使用unput()来释放。


数组通过宏YYLMAX来确定大小。


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.