flex中的正则表达式

本文探讨了flex中的正则表达式,强调重复匹配操作符针对邻近表达式的原则。同时,介绍了如何处理二义模式,当存在多个可匹配模式时,flex会选择匹配更多字符串的模式,或者优先匹配先出现的模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flex中的正则表达式

符号含义例子
[]匹配方括号中的任意一个字符[0-9]:表示数字0~9中的一个字符
\类似C中的转义字符
[a-z]{-}[jv]匹配前一个括号减去后一个括号集合中的任意一个字符[0-3]{-}[0]:表示字符1、2、3中的任意一个
^若是正则表达式的第一个字符就表示行首,也被用于方括号中表示补集
$若是正则表达式的最后一个字符就匹配行尾
{}表示前一个模式可以匹配的最小和最大次数A{1,2}:表示匹配A或AA
0{3}:表示匹配000
*匹配零个或多个前一个表达式[ \t]*:表示匹配任意个空格或tab,也可以是空白字符
+匹配1个或多个前一个表达式[0-9]+:匹配数字字符串,如1,11,但不能是空字符串
匹配零个或一个前一个表达式-?[0-9]+:匹配一个有符号数字
|匹配紧接在前面的表达式,或者紧跟在后米纳的表示是apple|pear:匹配两种水果名字中的任意一个
“…”所有引号中的字符将基于字面意义被解释
/匹配斜线前的表达式,但要求紧跟着斜线后的表达式,但斜线后的表达式不会被“消耗”,他们会返还给输入以便继续匹配。每个模式只允许一个该操作符0/1:匹配01中的0,但不会匹配0或02
()把一系列的正则表达式组成一个新的正则表达式。a(bc|de):匹配abc或者ade

重复匹配的操作符总是针对邻近的表达式。或者可以使用括号来扩大表达式范围

二义模式

相同的输入可能被不同的模式匹配。flex的解决方法:

  • 匹配更多的字符串
  • 若两个模式都可匹配,则匹配更早出现的
"+" { return ADD; }
"=" { return ASSIGN; }
"+=" { return ASSIGNADD; }
// 字符串+=匹配为ASSIGNADD,因为更长
"if" { return KEYWORDIF; }
"else" { return KEYWORDELSE; }
[a-zA-z_][a-zA-Z0-9_]* { return IDENTIFIER; }
// keyword匹配优先于identitfier
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值