跳转到主要内容
模块 4 · 第 2 课(共 4)课程中的14/32~10 min
模块课程(2/4)

替代:`|`

管道 | 是正则表达式的 OR:如果 其中之一,则模式匹配 替代品匹配。它的优先级非常低: | 分隔所有内容 到其左侧和右侧直至封闭组或模式的开头。

Code
Pattern: cane|gatto|criceto
Sample:  Ho un cane, un gatto e un criceto.
               ^^^^     ^^^^^         ^^^^^^^

括号驱动优先级

如果没有括号,替代方案将从模式的开始到结束。几乎 您总是希望将 OR 限制为模式的 部分:将其包装在 一组。

Code
Pattern   Significato (errato vs corretto)
^a|b$     "inizio + a" oppure "b + fine"           (probabilmente sbagliato)
^(a|b)$   "inizio + (a oppure b) + fine"           (probabilmente giusto)

关于替代品的典型排序:将最 首先是特定/最长的。发动机尝试从左向右并停在 第一个匹配: gat|gatto 将始终仅匹配 gat。

替代方案的优先级和隔离性

| 运算符的优先级非常低。如果您编写 ^abc|def$,您正在寻找“以 abc 开头的字符串或以 def 结尾的字符串”。要查找“字符串开头,后跟 abc 或 def,后跟字符串结尾”,必须编写 ^(abc|def)$。

尝试一下

锻炼#regex.m4.l2.e1
尝试:0加载中...

查找文本中出现的三种动物“cane”、“gatto”、“criceto”(按任意顺序)。

正在加载编辑器...
显示提示

管道分隔了替代品。使用 g 标志来捕获它们。

3 次尝试后可用的解决方案

复习练习

锻炼#regex.m4.l2.e2
尝试:0加载中...

仅以整个单词形式查找单词“gennaio”或“febbraio”(使用“\\b”以避免匹配较长的单词)。使用括号来限制交替。

正在加载编辑器...
显示提示

\\b(gennaio|febbraio)\\b 将选择锚定到整个单词。

3 次尝试后可用的解决方案

额外的挑战

锻炼#regex.m4.l2.e3
尝试:0加载中...

查找以扩展名“.jpg”、“.png”或“.gif”结尾的文件名。

正在加载编辑器...
显示提示

使用组内的管道在扩展之间交替。

3 次尝试后可用的解决方案