0

我是 lex 新手,我想获取特定于正则表达式的所有匹配项

例如在以下文本中:

/* text text

text 
text

text */

text text
/* text text text text text text

text text */

我想选择 /* 和 */ 之间的两个匹配项

但是 lex 匹配整个外部匹配并且不返回两个!我使用这个表达式:

\/\*(.|\n)*\*\/

如何选择内部匹配而不是整个外部匹配?谢谢你

4

1 回答 1

1
\/\*([^*]|\n|\*+[^*/])*\*+\/

发生的事情是 * 是贪婪的——它会匹配尽可能长的字符串。前面的表达式通过确保正则表达式只有在它后面没有字符 / 时才能继续,来单独处理字符 *。这是通过使正则表达式的内部单元成为以下之一来实现的

  • 一个不是 * 的字符
  • 换行
  • 一串 *s 后跟一个不是 / 的字符

最后,有一串 *s 后跟 /。(注意:以前的版本没有正确处理这种情况。我真的希望 flex 有 *? 运算符。)

于 2009-04-29T20:51:42.477 回答