On Sun, Jun 04, 2017 at 02:52:36PM +0200, Dominique d'Humières wrote:
> >> - regexp "(\[0-9\]+)\[ \t\]+(?:(?:#)?\[ \t\]*include\[
> >> \t\]+)\[\"\](\[^\"\]*)\[\"\]" $i dummy lineno include_file
> >> + regexp -nocase
> >> "(\[0-9\]+)\\s+(?:(?:#)?\\s*include\\s+)\[\"\'\](\[^\"\'\]*)\[\"\'\]" $i
> >> dummy lineno include_file
> >
> > My regex sorcery may be a bit rusty, but why does \\s need a double
> > escape while \t appears with single escape?
>
> I have used the Segher’s tips.
Nah, that wasn't a tip. A tip is: don't use double quotes unless you
actually want double quotes. You can write this as:
regexp -nocase {([0-9]+)\s+(?:(?:#)?\s*include\s+)["']([^"']*)["']} $i dummy
lineno include_file
or even
regexp -nocase {([0-9]+)\s+#?\s*include\s+["']([^"']*)["']} $i dummy lineno
include_file
(where I removed the useless (?:) groups as well).
You want double quotes if you want command substitution ("bla[stuff]bla"),
variable substitution ("$something"), or backslash substitution (like "\t"
becomes a tab char). In a regexp you do not usually have any use for this,
and it hurts so much.
Segher