0

我试图理解正则表达式:

(0+1)*1(0+1)*

你能提供符合这种模式的例子吗?

0+1 表示联合。这听起来像逻辑或,不是吗?我们应该在 0 或 1 之间选择吗?

01 表示串联。这听起来像逻辑与,不是吗?我们应该一起使用 01 数字吗?

(0+1)* 表示迭代。我们可以迭代 0 次或 1 次吗?000011110000是否匹配 (0+1)* 模式?

4

4 回答 4

6

如果这被解释为一个正则表达式,它匹配包含

zero or more sequences of
    (one or more zeros followed by a single one), 
followed by a single one, 
followed by zero or more sequences of
    (one or more zeros followed by a single one)

作为一个布尔代数表达式,如果去掉星号,它的计算结果为

(false OR true) AND true AND (false OR true)

评估为真。

于 2012-10-15T10:14:21.490 回答
3
(0+1)*1(0+1)*

如果这是一个正则表达式,它将匹配

连续出现一个或多个零位,后跟一个“1”位

以上组合零次或多次,后跟“1”位

后跟零位一次或多次后跟一位数字一次

以上行零次或多次。

+ 

在 REGEX 中表示前面字符的“一次或多次”出现

* 

在 REGEX 中表示前面字符的“零次或多次”出现

常用括号“()”用于对扩展进行分组。

在这种情况下,“0”和“1”在字面上用作字符,而不是因为它们是数值。

要了解它是如何工作的,请考虑以下正则表达式:

(a+b)*c(d+e)*

用字面理解的字母,而不是变量。

于 2012-10-15T10:15:29.660 回答
2

这是输出YAPE::Regex::Explain

The regular expression:

(?-imsx:(0+1)*1(0+1)*)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  (                        group and capture to \1 (0 or more times
                           (matching the most amount possible)):
----------------------------------------------------------------------
    0+                       '0' (1 or more times (matching the most
                             amount possible))
----------------------------------------------------------------------
    1                        '1'
----------------------------------------------------------------------
  )*                       end of \1 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \1)
----------------------------------------------------------------------
  1                        '1'
----------------------------------------------------------------------
  (                        group and capture to \2 (0 or more times
                           (matching the most amount possible)):
----------------------------------------------------------------------
    0+                       '0' (1 or more times (matching the most
                             amount possible))
----------------------------------------------------------------------
    1                        '1'
----------------------------------------------------------------------
  )*                       end of \2 (NOTE: because you are using a
                           quantifier on this capture, only the LAST
                           repetition of the captured pattern will be
                           stored in \2)
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
于 2012-10-15T11:04:29.087 回答
1

基本上(0+1)*计算任何1和0的序列。因此,在您的示例中,(0+1)*1(0+1)*应该匹配任何具有 1 的序列。它不会匹配000,但它会匹配010,1111(0+1)表示 0 或 1。 1*表示任意数量的 1。 11*or1+表示 1 的一次或多次出现。

于 2012-10-15T10:14:30.760 回答