正则表达式解释(0 + 1)* 1(0 + 1)*

时间:2012-10-15 10:04:32

标签: regex

我正在尝试理解正则表达式:

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

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

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

01表示连接。 这听起来像逻辑AND,不是吗?我们应该一起使用01位吗?

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

4 个答案:

答案 0 :(得分:4)

如果要将其解释为正则表达式,则它匹配包含

的表达式
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)

评估为真。

答案 1 :(得分:3)

以下是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
----------------------------------------------------------------------

答案 2 :(得分:2)

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

如果这是正则表达式,则匹配

连续一次或多次为零,后跟“1”数字

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

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

以上零线或更多次。

+ 
REGEX中的

表示前一个字符的“一次或多次”外观

* 
REGEX中的

表示前面字符的“零次或多次”外观

常用括号“()”用于分组扩展名。

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

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

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

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

答案 3 :(得分:1)

基本上(0+1)*匹配任何1和0的序列。因此,在您的示例中,(0+1)*1(0+1)*应该匹配任何包含1的序列。它与000不匹配,但它匹配0101111等。 (0+1)表示0 OR 1。 1*表示任意数量的。 11*1+表示一个或多个出现1。