jflex:为什么这个正则表达式匹配?

时间:2011-08-22 10:28:48

标签: regex jflex

在我的词法分析器中,我写了以下正则表达式:

"///"\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转义字符并且忽略它。

2 个答案:

答案 0 :(得分:1)

解决方法是正确的,在版本1.5.0之前\s不是JFlex中的特殊转义序列,只是表示字母s。从版本1.5.0开始,正则表达式应该按预期工作。

@不是特殊字符,不需要转义。

答案 1 :(得分:0)

是否正在转义\以便传递的正则表达式实际上是"///"s[^@s].*

尝试双重转义,以便使用"///"\\s[^@\\s].*