2015-03-13 15 views
6

Geany's documentation on negative assertions làm cho hình như có thể.Có vẻ ngoài tiêu cực trong tìm kiếm regex trong Geany không?

Để tham khảo, công trình này và mang lại cho tôi kết quả:

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

Nhưng regex giống nhau, hoặc bất kỳ regex với một lookbehind tiêu cực, mang lại cho tôi không có kết quả khi phóng từ Geany (v 1.24.1)

enter image description here

Vấn đề ở đâu? Tài liệu có sai không?

chính xác: chủ đề không phải là về làm thế nào để tránh làm một cái nhìn tiêu cực đằng sau nhưng về làm thế nào để làm bất cứ cái nhìn tiêu cực chuẩn PCRE phía sau.

+0

thử 'chức năng \ (' –

Trả lời

5

Tôi nhận được sự hỗ trợ từ các nhà phát triển geany trên freenode. Rất hữu ích. Đây là những gì họ nói với tôi:

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

Tuy nhiên, sau khi bạn đã thử nó, bạn phải lỗi này:

/bin/grep: conflicting matchers specified

... mà tôi đã nói đây là một lỗi Geany. Geany gọi grep -E-P không tương thích với nó.

Cách giải quyết duy nhất của bạn là có tập lệnh shell gọi grep với -P thay vì -E và sử dụng tập lệnh này. Bạn sẽ có thể cấu hình công cụ grep để gọi trong các tùy chọn geany.

Một ví dụ về shell script cho biết:

#!/bin/sh 

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

exec grep $matchopts "[email protected]" 

Geany sử dụng either -F or -E (đây là những công cụ chỉ có sẵn trong POSIX grep) cho grep, vì vậy tại sao bạn không thể vượt qua -P.

Tôi đã báo cáo the bug cho các nhà phát triển geany.

+2

Good job <°)))))> –

1

workaround khác là để tránh sự khẳng định lookbehind tiêu cực ... nhưng nó xấu xí rất nhiều: (?! <= \ S).

(^.?|[^=] |=[^ ]|[^=][^ ])function 
Các vấn đề liên quan