【发布时间】:2021-06-08 10:43:03
【问题描述】:
我想匹配以“#”开头的字符串,然后匹配所有内容,直到匹配“#”后面的字符。这可以使用像这样的捕获组来实现:#(.)[^(?1)]*(?1)(EDIT 这个正则表达式也是错误的)。这匹配#$foo$,不匹配#%bar&,匹配#"foo"bar的前6个字符。
但是由于 flex lex 不支持捕获组,这里的解决方法是什么?
【问题讨论】:
-
您想到了哪个正则表达式库,它接受
[^(?1)]作为有效的字符类?我不熟悉它。 -
我只是想到了。无效吗?
-
我知道的所有允许反向引用的正则表达式库只允许它们作为字符串匹配,而不是作为字符类的成员。但是有很多正则表达式库,我不能声称知道所有这些。
-
是的,很抱歉。我也没有找到。所以这个特殊问题在所有现有/已知的库中都没有解决。 :)
-
在大多数正则表达式库中,您会使用非贪婪匹配而不是排除。 (但是 (f)lex 也没有非贪婪匹配。)所以你可以写
#(.)(.*?)\1。 (regex101.com/r/bYnaPq/1)(Regex101 很酷,但对 (f)lex 一点用处都没有。)
标签: flex-lexer lex capturing-group