首页 > 解决方案 > 如何在编译器设计中处理正则表达式中的“except”?

问题描述

我正在研究编译器设计,但不知道如何处理 RE 中的除了语句。

例如:除了 (011,001,010) 之外只有 3 位二进制数的文字的 RE

我知道 3 位二进制数的 RE 将是:

或者

但是我怎么能在这里处理“除了”呢?

标签: regexcompiler-constructionregular-language

解决方案


使用 3 次 1 或 0,可以有 8 种组合。要匹配有效的 5 个组合,您可以列出所有 5 个或使用模式来匹配 1 后跟 1 和 0 的所有组合或匹配 000。

^(?:1[01][01]|000)$

正则表达式演示

如果你有更长的字符串,你也可以使用负前瞻,例如

^(?!01[01]|001)[01]{3}$

正则表达式演示

请注意,您可以使用[01]而不是使用替代(0|1)


推荐阅读