第14课:一切都是条件性的

正如我们之前提到的,保持表达精确总是好的。这不仅适用于编程、交流,也适用于正则表达式。举个例子,你不会给别人写一份杂货清单叫他去买 “Buy more .*”,因为你根本不知道他会买回来什么。相反你会写 “Buy more milk” 或 “Buy more bread”。而在正则表达式中,我们实际上可以明确地定义这种条件判断。

具体来说,在使用分组时,你可以使用 |(逻辑“或”,也叫“管道符”) 来表示多个可能的字符序列。比如在上面的例子中,我们可以写出正则模式 "Buy more (milk|bread|juice)",它只会匹配以下字符串:Buy more milk、Buy more bread 或 Buy more juice。

就像普通分组一样,你可以在条件中使用任意的字符序列或元字符。例如,([cb]ats*|[dh]ogs?) 可以匹配 cats 或 bats,也可以匹配 dogs 或 hogs。 不过要注意,当模式中的条件太多时会变得难以阅读,因此当正则变复杂时,可以考虑将它们拆分成多个更清晰的模式。

现在请尝试编写一个带有条件的正则表达式,用于匹配下面文本中那些小而毛茸茸的小动物的行。

练习 14: 条件匹配字符
Task Text  
匹配 I love cats To be completed
匹配 I love dogs To be completed
跳过 I love logs To be completed
跳过 I love cogs To be completed
提示

通过使用逻辑或(|),我们可以使用正则表达式 I love (cats|dogs) 来匹配前两行。但 logs 和 cogs 其实也挺酷的。

解决上面的问题以继续到, 或者可以参考答案