Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何处理;除「;编译器设计中的正则表达式?_Regex_Compiler Construction_Regular Language - Fatal编程技术网

Regex 如何处理;除「;编译器设计中的正则表达式?

Regex 如何处理;除「;编译器设计中的正则表达式?,regex,compiler-construction,regular-language,Regex,Compiler Construction,Regular Language,我正在从事编译器设计,不知道如何处理RE中的语句 例如: 除(011001010)外,只有3位二进制数的文本的RE 我知道3位二进制数的RE为: (0 | 1)(0 | 1)(0 | 1) 或 (0|1){3} 但是我如何处理这里的“除”呢?使用3次1或0,可以有8个组合。要匹配有效的5个组合,您可以列出所有5个组合,或者使用模式匹配1,然后是1和0的所有组合,或者匹配000 ^(?:1[01][01]|000)$ 例如,如果字符串较长,则还可以使用负前瞻 ^(?!01[01]|00

我正在从事编译器设计,不知道如何处理RE中的语句

例如: 除(011001010)外,只有3位二进制数的文本的RE

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

  • (0 | 1)(0 | 1)(0 | 1)

  • (0|1){3}

但是我如何处理这里的“除”呢?

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

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

例如,如果字符串较长,则还可以使用负前瞻

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


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

使用3次1或0将有8种组合。您想排除3个或它们,因此您可以考虑只列出其他5个。如果你有一个更大的集合,你可以使用一个负前瞻
(?!
,使用一个字符类
[01]
,而不是
(0 | 1)
^(?!0[01]1 | 010)[01]{3}$
,但是匹配它们的时间更短
^[10]00 | 1[01][01]$
@theourthbird谢谢!这对我很有效。