在我的lexer中,我写了以下正则表达式:
"///"s*[^@s].*
我在调试模式下执行了byacc/j,它指出下面一行匹配正则表达式。
但是为什么这个正则表达式匹配这一行呢?
/// @Service( version="1.0.0" )
我也尝试了"///"s*[^@s].*
,以防@
是一个特殊字符,但它也匹配。有限责任
我认为我的正则表达式只匹配一个以///
开头的字符串,后跟可选的空白。那么除了@
以外的任何非空白字符必须出现,后面跟着任何字符。
编辑:对不起,我的意思是regex在jflex中使用,不是 byacc/j.
解决方案:在jflex文档中,我没有找到任何s
转义序列,所以我尝试了这个正则表达式"///"[ tf]*[^@ tf].*
,它工作了。似乎不支持s
转义字符,jflex会忽略它。
解决方法是正确的,在1.5.0版本之前,s
在JFlex中不是一个特殊的转义序列,而只是表示字母s
。从1.5.0版本开始,regexp应该像预期的那样工作。
@
不是特殊字符,不需要转义。
是否对进行了转义,以便传递的正则表达式实际上是"///"s[^@s].*
尝试双转义,使用"///"\s[^@\s].*