I'm talking about regex. Regex libraries in practical use do not use NFA. I'm talking about actual code that's written using normal languages. I'm familiar with the difference between "regular expressions" as in "regular languages".
a|ab {cout << "matched ab" << std::endl; } b { cout << "matched b" << std::endl; }
if provided with "ab", will match the first rule with "ab", and not the first with "a" then the second with "b".
But DFAs can implement the preference-order semantics found in backtracking regex engines too. Russ Cox's articles show how to do that.
(Just adding some additional info to your point.)