flex规则段模式和正则表达式

flex规则段是用正则表达式说明的,另外也有他自己的一些格式:

1.语系对正则表达式的影响:

不同语系,字符的种类,数量,排序各不相同,

LANG=C时:字母和数字的顺序是01234...ABCD...Zabc...z,[A-D]指从A,B,C,D中取一个字符。

LANG=zh_CN时:字母和数字的顺序是01234...aAbBcCdD...zZ,[A-D]指从A,b,B,c,C,d,D中取一个字符。

2.正则表达式字符

^x:以x开头的一整行。

x&:以x结尾的一整行。

.:除换行符外的任一字符。

\:转义,去除特殊符号的特殊意义。

[list]:从字符集中取任意一个字符,例:[abc]表示从abc中取任意一个,[ABe-h]表示取A或B或e到h中任意一个。[]中,有些情况下特殊符号会失去特殊意义,如[-abc],-在最前或最后都会失去连字的意义,[a|c]中,|失去‘或’的意义而变成一个普通字符,[a^b]中^失去非的意义。

[n1-n2]:[a-g]表示从a到g中取任一一个字符,注意语系影响。

[^list]:与[n1-n2]相反,取list中不包含的一个字符。

\[n,m\]:连续n到m个前一字符,例x\{2,4\},xx,xxx,xxxx匹配。

*:重复0个或多个前面的字符。

+:重复一个或多个前面的字符;例如o+,o,oo,ooo等匹配。

?:0次或1次出现前面的字符,例o?,o,oo匹配。

|:或,例x|y,x或y。

():字符串,例(xyz),仅xyz字符串匹配。

(|):字符串之前的或,例(abc|xyz),两字符串abc,xyz中任意一个匹配。

()+:字符串重复出现到少一次,例(xyz),xyz,xyzxyz,xyzxyzxyz...匹配

...

3.正则表达式举例

X:匹配一个X字符。

X{2,}:2个或多个X。

X{3}:3个前一字符,XXX。

4.flex,lex中的一些匹配模式。

{name}:类似一个变量,例NUMBER [0-9]+,则可在其他地方用{NAME}代表这个正则式。

"[xyz]\"foo":“”表示字符串,类似上一节中的(),表示[xyz]\"foo这个字串,字串的任何字符都失去特殊意义。

\123:一个八进制值为123的字符。

\x2a:一个十六进制值为2a的字符。

\0:一个空字符。

(?option:pattern):option可选i,s,x中的0个或多个,也可选-i,-s,。i表示大写敏感,-i表示大小写不敏感,s仅用于改变.的含义为任一字符,-s则指明.的含义为除换行外的任一字符。x表示忽略pattern中的注释和空白,除非空白前有转义符\或空白在[]或""中。

  (?:foo)         same as  (foo)

  (?i:ab7)        same as  ([aA][bB]7)

  (?-i:ab)        same as  (ab)

  (?s:.)          same as  [\x00-\xFF]

  (?-s:.)         same as  [^\n]

  (?ix-s: a . b)  same as  ([Aa][^\n][bB])

  (?x:a  b)       same as  ("ab")

  (?x:a\ b)       same as  ("a b")

  (?x:a" "b)      same as  ("a b")

  (?x:a[ ]b)      same as  ("a b")

  (?x:         a/* comment */bc)          same as  (abc)

(?# comment ):忽略()中的所有东西

<s>r:在开始条件s下匹配正则表达式r

<s1,s2,s3>r:在开始条件s1或s2或s3下匹配r

<*>r:任何开始条件下匹配r

<<EOF>>:文件尾

<s1,s2><<EOF>>:在开始条件s1或s2下的文件尾



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值