Most of your pattern is literal
We touched this in Track 1, but it's worth one focused lesson because it's the foundation. Every character in your pattern that isn't one of the 14 metacharacters is a literal character. It matches itself. That's the entire rule.
Pattern hello matches the substring hello. Pattern 2026-05-04 matches the substring 2026-05-04. Pattern The quick brown fox matches the substring The quick brown fox.
Case sensitivity is the default
By default, cat does NOT match Cat or CAT. Almost every engine has a case-insensitive flag — i in JS / PCRE, re.IGNORECASE in Python, (?i) as an inline flag in many flavors. Use it explicitly when you want case-insensitive matching; don't assume it.
Whitespace matches whitespace exactly
A literal space in your pattern matches exactly one space. Three spaces in your pattern require three spaces in the input. If you want "one or more spaces of any kind," you need \s+ (Track 2, lesson 6).
Unicode is mostly transparent
Modern engines handle Unicode literals as you'd expect. Pattern 피파 matches 피파. The complications start when you mix Unicode with case-insensitivity, normalization forms, or shorthand classes — covered later. For literals alone, just type the characters.