我试图理解正则表达式:
(0+1)*1(0+1)*
你能提供符合这种模式的例子吗?
0+1 表示联合。这听起来像逻辑或,不是吗?我们应该在 0 或 1 之间选择吗?
01 表示串联。这听起来像逻辑与,不是吗?我们应该一起使用 01 数字吗?
(0+1)* 表示迭代。我们可以迭代 0 次或 1 次吗?000011110000是否匹配 (0+1)* 模式?
我试图理解正则表达式:
你能提供符合这种模式的例子吗?
0+1 表示联合。这听起来像逻辑或,不是吗?我们应该在 0 或 1 之间选择吗?
01 表示串联。这听起来像逻辑与,不是吗?我们应该一起使用 01 数字吗?
(0+1)* 表示迭代。我们可以迭代 0 次或 1 次吗?000011110000是否匹配 (0+1)* 模式?
如果这被解释为一个正则表达式,它匹配包含
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)
评估为真。
(0+1)*1(0+1)*
如果这是一个正则表达式,它将匹配
连续出现一个或多个零位,后跟一个“1”位
以上组合零次或多次,后跟“1”位
后跟零位一次或多次后跟一位数字一次
以上行零次或多次。
+
在 REGEX 中表示前面字符的“一次或多次”出现
*
在 REGEX 中表示前面字符的“零次或多次”出现
常用括号“()”用于对扩展进行分组。
在这种情况下,“0”和“1”在字面上用作字符,而不是因为它们是数值。
要了解它是如何工作的,请考虑以下正则表达式:
(a+b)*c(d+e)*
用字面理解的字母,而不是变量。
这是输出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
----------------------------------------------------------------------
基本上(0+1)*
计算任何1和0的序列。因此,在您的示例中,(0+1)*1(0+1)*
应该匹配任何具有 1 的序列。它不会匹配000
,但它会匹配010
,1
等111
。
(0+1)
表示 0 或 1。
1*
表示任意数量的 1。
11*
or1+
表示 1 的一次或多次出现。