[Geany-Users] Find, regex, spans lines

Colomban Wendling lists.ban at xxxxx
Thu Jul 31 18:27:46 UTC 2014


Le 31/07/2014 19:52, Péter a écrit :
> When I issue a Find, with regular expression like "[^Q]*Q", Geany
> behaves strangely: the highlight (the string found) spans many lines.
> The "[^Q]*" matches as if the lines were joined.
> (The search is *not* line-based.)
> 
> Do you experience the same?

Yes

> Why does geany behave like this?

For technical reasons, and because although I started some work for
line-based RE support, I didn't finish it (yet).

If you're interested in the technical reason, it's quite simple: we use
a multiline-capable regex engine and we pass it a pointer to the whole
buffer instead of feeding it line-by line -- hence allowing it to
perform multi-line matches.

> How to alter this behaviour?

First, let's see why it doesn't already do what you want:  even though
the DOTALL option is not enabled (which means "." won't match a
newline), you can match newlines (e.g. with "\n").  But as you use a
"not" range (anything but "Q"), and newline are not part of this range
(they admittedly aren't "Q"s), they get included.

So, to work this around, use "anything but Q or newline": [^Q\r\n]


Regards,
Colomban


More information about the Users mailing list