When looking for patterns in text, regular expressions are frequently the most common way to attach those kind of problems. They are very flexible and powerful, and even though they cannot express all kinds of grammar they frequently can handle most common cases.
The power of regular expressions comes out of the wide set of symbols and expressions they can generate. The problem is that for developers that are not used to regular expressions, they can look just like plain noise, and even people who have experience with them will frequently have to think a bit before understanding an expression like the following one:
"^(*d{3})*( |-)*d{3}( |-)*d{4}$"
This expression actually tries to detect phone numbers.
For most common cases, developers need to look for very simple patterns: for example, file extensions (does it end with .txt?), separated text, and so...