6

否定的なアサーションに関する Geany のドキュメントは、それが可能であるように見えます。

参考までに、これは機能し、結果が得られます。

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

しかし、Geany (v 1.24.1) から起動した場合、同じ正規表現、または否定的な後読みを持つ正規表現は結果をもたらしません。

ここに画像の説明を入力

問題はどこだ?ドキュメントは間違っていますか?

精度:このトピック、ネガティブ ルック ビハインドを回避する方法についてではなく、標準のPCREネガティブ ルック ビハインドを行う方法についてです。

4

2 に答える 2

5

FreenodeでGeany の開発者からサポートを受けましたが、とても役に立ちました。彼らが私に言ったことは次のとおりです。

文書化された RE 構文は、Geany によって直接使用される RE エンジン (検索など) にのみ適用されますが、ファイル内検索機能は、独自の構文を持つ grep ツール (設定 -> ツール -> grep で構成) を呼び出します。GNU grep の場合、ダイアログの「追加オプション」フィールドに「-P」を追加できます。

ただし、試した後、次のエラーが発生しました。

/bin/grep: 競合するマッチャーが指定されました

... これは Geany のバグだと言われました。Geany は を呼び出しgrep -E-Pそれと互換性がありません。

唯一の回避策は、grepを呼び出すシェル スクリプトを-Pの代わりに-E使用し、このスクリプトを使用することです。Geany 設定で呼び出すように grep ツールを構成できるはずです。

上記のシェルスクリプトの例:

#!/bin/sh

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

exec grep $matchopts "$@"

Geany はgrep にor (これらは POSIX grep で利用可能な唯一のエンジンです) を使用します-F-E-P

Geany 開発者にバグを報告しました。

于 2015-03-13T13:49:15.783 に答える
1

別の回避策は、否定的な後読みアサーションを回避することです...しかし、それはかなり醜いです:

(^.?|[^=] |=[^ ]|[^=][^ ])function
于 2015-03-13T14:47:45.553 に答える