Module lessons (2/4)
Alternation: `|`
The pipe | is the OR of regex: the pattern matches if one of the
alternatives matches. Its precedence is very low: | separates everything
to its left and right up to the enclosing group or the start of the pattern.
Pattern: cane|gatto|criceto
Sample: Ho un cane, un gatto e un criceto.
^^^^ ^^^^^ ^^^^^^^Parentheses drive precedence
Without parentheses, alternatives span from start to end of the pattern. Almost always you want to limit the OR to a portion of the pattern: wrap it in a group.
Pattern Significato (errato vs corretto)
^a|b$ "inizio + a" oppure "b + fine" (probabilmente sbagliato)
^(a|b)$ "inizio + (a oppure b) + fine" (probabilmente giusto)About the typical ordering of alternatives: put the most
specific/longest ones first. The engine tries from left to right and stops at the
first one that matches: gat|gatto would always only match gat.
Precedence and isolation of alternatives
The | operator has very low precedence. If you write ^abc|def$, you are looking for "a string starting with abc OR a string ending with def". To look for "start of string followed by abc or def, followed by end of string", you must write ^(abc|def)$.
Try it
Find every occurrence of the three animals `cane`, `gatto`, `criceto` in the text (in any order).
Show hint
The pipe separates alternatives. Use the g flag to catch them all.
Solution available after 3 attempts
Review exercise
Find the words `gennaio` or `febbraio` ONLY as whole words (use `\\b` to avoid matching inside longer words). Use parentheses to limit the alternation.
Show hint
\\b(gennaio|febbraio)\\b anchors the choice to whole words.
Solution available after 3 attempts
Additional challenge
Find filenames ending with the extensions `.jpg`, `.png`, or `.gif`.
Show hint
Use the pipe inside a group to alternate between extensions.
Solution available after 3 attempts