2015-03-13 16 views
6

Geany's documentation on negative assertions lässt es so aussehen, als wären sie möglich.Ist in Geany ein negativer Lookbehind in Regex-Suchen möglich?

Als Referenz dies funktioniert und gibt mir Ergebnisse:

pcregrep -r "(?<!=)function\(" src/main-js/ 

Aber die gleiche Regex oder jede Regex mit einem negativen Lookbehind, gibt mir kein Ergebnis, wenn sie von Geany (v 1.24.1) ins Leben gerufen

enter image description here

Wo liegt das Problem? Ist die Dokumentation falsch?

Präzision: das Thema ist nicht darüber, wie hinter tut einen negativen Blick zu vermeiden, sondern darum, wie hinter jedem Standard-PCRE negativen Blick zu tun.

+0

Versuch 'Funktion \ (' –

Antwort

5

Ich bekam Unterstützung von Geany Devs auf Freenode. Sehr hilfreich. Hier ist, was sie mir gesagt:

The documented RE syntax only applies to the RE engine directly used by Geany (e.g. in Find), but the Find in Files features calls the grep tool (as configured in preferences->tools->grep), which has its own syntax. For GNU grep, you can add "-P" to the "Extra options" field in the dialog

jedoch, nachdem Sie es versucht, dieser Fehler hatte:

/bin/grep: conflicting matchers specified

... zu dem ich gesagt, dass dies ein Fehler war geany. Geany ruft grep -E, und -P ist nicht damit kompatibel.

Ihre einzige Problemumgehung besteht darin, ein Shell-Skript aufzurufen, das grep mit -P anstelle von -E aufruft, und dieses Skript verwendet. Sie sollten in der Lage sein, das Grep-Tool so zu konfigurieren, dass es Geany-Einstellungen aufruft.

Ein Beispiel des Shell-Skript:

#!/bin/sh 

matchopts=$(echo "$1" | tr E P) 
shift 

exec grep $matchopts "[email protected]" 

Geany verwendet either -F or -E (dies sind die einzigen verfügbaren Motoren in POSIX grep) für grep, also warum Sie nicht -P passieren kann.

Ich habe the bug an geany Entwickler gemeldet.

+2

Good job <°)))))> –

1

Eine andere Lösung ist die negative Lookbehind Behauptung zu vermeiden ... aber es ist eine Menge hässlicher: (?! <= \ S).

(^.?|[^=] |=[^ ]|[^=][^ ])function