2015-03-13 27 views
6

Geany's documentation on negative assertions sprawia, że ​​wygląda na to, że są możliwe.Czy możliwe są negatywne lookbehind wyszukiwania regex w Geany?

Dla porównania, to działa i daje mi wyniki:

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

Ale samo regex lub każdy regex z ujemnym lookbehind, daje mi żadnego rezultatu, gdy uruchomiony z Geany (v 1.24.1)

enter image description here

Gdzie jest problem? Czy dokumentacja jest zła?

Precyzja: wątek nie jest o tym, jak unikać robienia negatywny wygląd tyłu, ale o tym, jak zrobić dowolny standardowy wygląd PCRE za negatywny.

+0

try 'funkcja \ (' –

Odpowiedz

5

Mam wsparcie od geany programistów na freenode. Bardzo pomocne. Oto co mi powiedzieli:

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

Jednak po jej spróbował, miał ten błąd:

/bin/grep: conflicting matchers specified

... do którego powiedziano mi, że był to błąd Geany. Geany dzwoni pod numer grep -E, a -P nie jest z nim zgodny.

Jedynym rozwiązaniem jest użycie skryptu powłoki wywołującego grep z numerem -P zamiast -E i użycie tego skryptu. Powinieneś być w stanie skonfigurować narzędzie grep do wywoływania preferencji geany.

Przykładem wspomnianego skryptu powłoki:

#!/bin/sh 

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

exec grep $matchopts "[email protected]" 

Geany wykorzystuje either -F or -E (są to jedyne dostępne silniki POSIX grep) do grep, więc dlaczego nie można przejść -P.

Zgłosiłem the bug dla programistów geany.

+2

Dobra robota <°)))))> –

1

Innym rozwiązaniem jest unikanie negatywnego lookbehind stwierdzenie ... ale to dużo brzydsze: (? <= \ S).

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