在我的词法分析器中,我写了以下正则表达式:
"///"\s*[^@\s].*
我在调试模式下执行byacc/j并且它声明以下行与正则表达式匹配 但为什么这个正则表达式匹配这条线呢?
/// @Service( version="1.0.0" )
我也试过"///"\s*[^\@\s].*
,以防@
是一个特殊字符,但它也匹配。 o.O
我认为我的正则表达式只匹配以///
开头的字符串,后跟可选的空格。除了@
之外的任何非空白字符必须来,然后是任何字符。
编辑:对不起,我的意思是在jflex中使用正则表达式,不是 byacc / j。
解决方法:在jflex documentation我没有找到任何\s
转义序列,所以我尝试了这个正则表达式"///"[ \t\f]*[^@ \t\f].*
并且它有效。似乎jflex不支持\s
转义字符并且忽略它。
答案 0 :(得分:1)
解决方法是正确的,在版本1.5.0之前\s
不是JFlex中的特殊转义序列,只是表示字母s
。从版本1.5.0开始,正则表达式应该按预期工作。
@
不是特殊字符,不需要转义。
答案 1 :(得分:0)
是否正在转义\以便传递的正则表达式实际上是"///"s[^@s].*
尝试双重转义,以便使用"///"\\s[^@\\s].*