Regex 为什么这个正则表达式匹配true和false?

Regex 为什么这个正则表达式匹配true和false?,regex,Regex,我不小心把括号漏掉了 /true | false/ 但是成功了!据我所知,a|表示“前面的模式或后面的模式”,因此e或f,或与/tru(e | f)alse/等效的模式。后来我注意到了我的错误,但感到困惑。这不应该只匹配truealse和trufalse?然后,我做了更多的测试,发现它也与这些匹配为什么会匹配true,false,truealse,以及truflse? 小提琴:前面的模式是当前组中前面的所有内容。因此,true是前面的模式,false是后面的模式 如果您实际上只想匹配trufl

我不小心把括号漏掉了

/true | false/
但是成功了!据我所知,a
|
表示“前面的模式或后面的模式”,因此
e
f
,或与
/tru(e | f)alse/
等效的模式。后来我注意到了我的错误,但感到困惑。这不应该只匹配
truealse
trufalse
?然后,我做了更多的测试,发现它也与这些匹配为什么会匹配
true
false
truealse
,以及
truflse

小提琴:

前面的模式是当前组中
前面的所有内容。因此,
true
是前面的模式,
false
是后面的模式

如果您实际上只想匹配
truflse
truealse
,则可以使用
tru(e | f)alse
围绕
建立一个分组

至于它为什么匹配
truealse
:它匹配
true
,因为您没有指定任何锚。因此,它将匹配任何包含
true
false
的字符串。

前面的模式是当前组中
|
前面的所有内容。因此,
true
是前面的模式,
false
是后面的模式

如果您实际上只想匹配
truflse
truealse
,则可以使用
tru(e | f)alse
围绕
建立一个分组


至于它为什么匹配
truealse
:它匹配
true
,因为您没有指定任何锚。因此,它将匹配其中包含
true
false
的任何字符串。

要添加到这一点:
tru(e | f)alse
中的捕获组将捕获
e
f
,具体取决于输入字符串。如果您只想执行分组而不想捕获,那么可以使用非捕获组:
tru(?:e | f)alse
@AmalMurali:捕获/非捕获组在某种程度上依赖于方言。因为OP没有指定方言,所以我不想解释它。(不过,感谢您的澄清!)要补充的是:
tru(e | f)alse
中的捕获组将捕获
e
f
,具体取决于输入字符串。如果您只想执行分组而不想捕获,那么可以使用非捕获组:
tru(?:e | f)alse
@AmalMurali:捕获/非捕获组在某种程度上依赖于方言。因为OP没有指定方言,所以我不想解释它。(不过,感谢您的澄清!)