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,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的字符。 |