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



在我的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].*

相关内容

  • 没有找到相关文章

最新更新