Written September 23, 2012. Tagged Regular expressions.
For some reason, people often seem to confuse ()
and []
in regular expressions.
Say you want to match only the strings "bar" and "car".
I sometimes see this mistake:
/[b|c]ar/
It will indeed match "bar" and "car" as intended. But it will also match "|ar".
Round brackets do grouping (and capture groups, and some other things). Within the group, you can use |
for alternation. So this would work as expected:
/(b|c)ar/
But square brackets are not the same as round brackets. Square brackets are syntax sugar for character-level alternation.
[abcd]
effectively expands to (a|b|c|d)
.
So if you do [b|c]
, that's syntax sugar for (b|\||c)
. Probably not what you want.
Instead do this:
/[bc]ar/