It only matters when the rest of the pattern is also flexible
Greedy and lazy produce the same result when the rest of the pattern is unambiguous. \d+abc and \d+?abc both match the same way against 1234abc — there's only one possible match.
The difference shows up when the pattern boundary is fuzzy: when the next thing the engine looks for can appear in multiple places. Then greedy goes to the last possible spot, lazy stops at the first.
Three rules of thumb
1. Extracting between markers? Use lazy or negated class. Tags, quoted strings, comments, anything bracketed. The first closing marker is what you want.
2. Validating fixed-shape input? Greedy is fine, often better. Phone numbers, dates, IDs — there's only one way to match them. Greedy backtracks slightly less in the success case.
3. Searching for one occurrence in noisy text? Greedy default. Logs, free-form documents. You usually want "as much as fits the pattern" because that's likely the real value.
The 'I just don't know' default
If you can't decide, write the pattern greedy first, then check what it matches on real input. If it eats too much, switch to lazy or negated class. Don't preemptively reach for lazy because "it sounds safer" — sometimes greedy is what you actually want.