Can be seem as a small language for pattern matching
regex101: build, test, and debug regex
A regular expression uses ordinary characters to stand for themselves
a, b, x →matches the letters itself
RS → concatenation of matches of R and S (they are both RegEx)
RS* → Single instance of R and 0 or more instances of S
R* → 0 or more occurrences of R
. → any char but newline
[aeiou] → matches chars inside the bracket
[A-Za-z0-9_] → matches the range from A-Z, a-z, 0-9 and underscore
[^a] → matches any characters except a
[^A-Za-z] → matches any characters except A-Za-z
[[:alpha:]] → matches any alphabetical characters
^R → R that's on the start of the line
R$ → R that's on the end of the line
\\x → just matching the character x
There are other grep algorithms too
for instance, there's the grep -E (extended grep)