正则表达式修改
Regular expression revision
问题:给定一个二进制字母表{0,1}
,写一个识别所有单词的正则表达式
至少有两个连续的“1”,例如 0100110
、0111
、00010011001
.
我尝试的答案是:0*{ (0|1)* 11+ }*
您可以使用像
这样的简单表达式
[01]*11[01]*
解释:
[01]*
- 零个或多个零或一
11
- 两个连续的 1
s
[01]*
- 零个或多个零或一
如果字母表是给定的,这样您就不必考虑任何不在该语言中的符号,并且您一次匹配一个单词,这样您就不必担心单词开头和结尾,很简单。
.*?11
我们勉强匹配所有内容,直到找到两个连续的 1。然后我们知道我们匹配的词是我们感兴趣的词。
但是,我觉得这不能回答您的问题。有些东西告诉我你正在使用一种非常受限的风格,不允许不情愿(尽可能少地与 *?
匹配),也不允许滥交(将 "whatever" 与 .
匹配)。
因此,将您的正则表达式想象成处于两种可能的状态。第一个是不满意的状态,我们没有匹配到连续的两个 1,第二个是满意的状态,我们 有.
- 只要我们匹配 0,或者 1 后跟 0,我们就保持不满意状态。这是
(0|10)*
.
- 然后匹配两个连续的1,达到满意状态。这是
11
.
- 之后,我们可以同时匹配0和1,保持满意状态。这是
(0|1)*
。如果你的风格中有字符 类,你可以使用它们,如 [01]*
.
把它们放在一起,我们得到
(0|10)*11(0|1)*
可以在 Regex 101.
上看到它的实际效果
问题:给定一个二进制字母表{0,1}
,写一个识别所有单词的正则表达式
至少有两个连续的“1”,例如 0100110
、0111
、00010011001
.
我尝试的答案是:0*{ (0|1)* 11+ }*
您可以使用像
这样的简单表达式[01]*11[01]*
解释:
[01]*
- 零个或多个零或一11
- 两个连续的1
s[01]*
- 零个或多个零或一
如果字母表是给定的,这样您就不必考虑任何不在该语言中的符号,并且您一次匹配一个单词,这样您就不必担心单词开头和结尾,很简单。
.*?11
我们勉强匹配所有内容,直到找到两个连续的 1。然后我们知道我们匹配的词是我们感兴趣的词。
但是,我觉得这不能回答您的问题。有些东西告诉我你正在使用一种非常受限的风格,不允许不情愿(尽可能少地与 *?
匹配),也不允许滥交(将 "whatever" 与 .
匹配)。
因此,将您的正则表达式想象成处于两种可能的状态。第一个是不满意的状态,我们没有匹配到连续的两个 1,第二个是满意的状态,我们 有.
- 只要我们匹配 0,或者 1 后跟 0,我们就保持不满意状态。这是
(0|10)*
. - 然后匹配两个连续的1,达到满意状态。这是
11
. - 之后,我们可以同时匹配0和1,保持满意状态。这是
(0|1)*
。如果你的风格中有字符 类,你可以使用它们,如[01]*
.
把它们放在一起,我们得到
(0|10)*11(0|1)*
可以在 Regex 101.
上看到它的实际效果