我正在尝试理解正则表达式:
你能提供符合这种模式的例子吗?
0 + 1表示联盟。 这听起来像逻辑OR,不是吗?我们应该在0还是1之间选择?
01表示连接。 这听起来像逻辑AND,不是吗?我们应该一起使用01位吗?
(0 + 1)*表示迭代。 我们可以迭代0或1次吗? 000011110000 匹配(0 + 1)*模式吗?
答案 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
不匹配,但它匹配010
,1
,111
等。
(0+1)
表示0 OR 1。
1*
表示任意数量的。
11*
或1+
表示一个或多个出现1。