Regex 变量名的正则表达式
我仍然使用Regex 变量名的正则表达式,regex,expression,bison,flex-lexer,Regex,Expression,Bison,Flex Lexer,我仍然使用[A-Za-z][A-Za-z_u$0-9]作为捕获变量名的正则表达式(在bison flex中)。现在我想给它加上点和方括号。 例如,它可以是abc.def[12]。我该怎么做呢?我不知道bison flex,但我认为您正在寻找的正则表达式是: [A-Za-z][\w$]*(\[\w$]+)?(\[\d+])? 但这并不是全部,因为它将在其他无效变量名中匹配(正如上面注释中提到的所有其他模式一样) 例如,在字符串123abc.def[12]456中匹配abc.def[12]使用正则表
[A-Za-z][A-Za-z_u$0-9]
作为捕获变量名的正则表达式(在bison flex中)。现在我想给它加上点和方括号。
例如,它可以是abc.def[12]。我该怎么做呢?我不知道bison flex,但我认为您正在寻找的正则表达式是:
[A-Za-z][\w$]*(\[\w$]+)?(\[\d+])?
但这并不是全部,因为它将在其他无效变量名中匹配(正如上面注释中提到的所有其他模式一样)
例如,在字符串123abc.def[12]456
中匹配abc.def[12]
使用正则表达式时,需要非常小心误报
所以你需要一个锚,一个消极的向后看和向前看(bison flex允许这些吗?)。
最后一个正则表达式将如下所示:
(
反向查找(?确保匹配的开始出现在不是\w(字字符)\d(数字)、点方括号或美元的字符上
对于负前瞻(?![\w\d\.\[\]$])
也是如此,这确保匹配结束后紧接着的字符不是\w(单词字符)\d(数字)、点方括号或美元
匹配项列表:
- abc.def[12]
- abc.def
- abcdef[12]
- abc.def12
- abc
- abc_12
- 美国广播公司_$
- a_$
- a_uu12.a_uu12
和一个不匹配的列表
- _abc
- $abc
- abc.def[]
- 12abc.def[12]
- abc.def[12]12
- _abc.def[12]
- $abc.def[12]
- abc.def[12]$
- [12] abc.def
- abc[12].def
同样,我不知道bison flex,但请注意,向后看和向前看并不全面,例如,在字符串#abc.def[12]
中会找到一个匹配的abc.def[12]
,但我不知道这是否会对您造成问题!@WiktorStribiżew。它不应该是[a-Za-z][[a-Za-z][0-9]*
?您真的希望abc.def[12]
成为一个单一标识符吗?因为它看起来像是一个成员访问,后跟一个数组访问,而数组访问不应该是一个单一的令牌。或者这只是巧合,比如说abc]]]def[
在您的语言中也是一个同样有效的标识符?我使用flex bison来解析查询条件(mongodb)。它实际上是colunm名称。列名类似于对象文件。我需要将其作为标识符并用于创建查询。如果您不关心表单,只需使用上面建议的正则表达式,它匹配abc.def[12]
btw.@user3379281:那么,尝试了[A-Za-z][[A-Za-z][0-9]*
?