1

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

"///"\s*[^@\s].*

我在调试模式下执行了byacc/j,它指出以下行与正则表达式匹配。
但是为什么这个正则表达式匹配这一行呢?

/// @Service( version="1.0.0" )

我也试过"///"\s*[^\@\s].*,万一@是特殊字符,但它也匹配。oO

我认为我的正则表达式只会匹配一个///以可选空格开头的字符串。除了必须出现的任何非空白字符之外@,后跟任何字符。

编辑:对不起,我的意思是在 jflex 中使用正则表达式,而不是byacc/j。

解决方法:jflex 文档中我没有找到任何\s转义序列,所以我尝试了这个正则表达式"///"[ \t\f]*[^@ \t\f].*并且它有效。jflex似乎\s不支持转义字符并默默地忽略它。

4

2 回答 2

1

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

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

于 2015-04-16T20:34:33.940 回答
0

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

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

于 2011-08-22T10:54:07.827 回答