捕获时是否正则表达式中的OR运算符的不同行为

时间:2015-01-21 12:16:53

标签: regex

我有两个Regex表达式,一个是^0|[1-9][0-9]*$,另一个是^(0|[1-9][0-9]*),第一个表达式匹配字符串"01",而后一个表达式可以' t。这两个表达的区别是什么?在我看来,后者只捕获匹配的字符串。我想知道为什么后者不能匹配"01"字符串。

2 个答案:

答案 0 :(得分:6)

见图解说明

^0|[1-9][0-9]*$

Regular expression visualization

Debuggex Demo

<强>对战

^(0|[1-9][0-9]*)$

Regular expression visualization

Debuggex Demo

因此,第二个RegEx要求字符串为“0”或以1-9字符开头。

答案 1 :(得分:1)

以这种方式看待他们:

^0            # Match a 0 at the start of the string
|             # or
[1-9][0-9]*$  # match a number > 1 at the end of the string.

^             # Match the start of the string.
(             # Start of group 1:
 0            # Match a zero
|             # or
 [1-9][0-9]*  # a number > 1.
)             # End of group 1.
$             # Match the end of the string.

交替扩展到第一个示例中的锚点,而它包含在第二个示例中的组中。