Geany 关于否定断言的文档使它们看起来是可能的。
作为参考,这有效并给了我结果:
pcregrep -r "(?<!= )function\(" src/main-js/
但是,从 Geany (v 1.24.1) 启动时,相同的正则表达式或任何具有负面后视的正则表达式都不会给我任何结果
哪里有问题?文档有错吗?
精度:主题不是关于如何避免在后面做负面观察,而是关于如何在后面做任何标准的PCRE负面观察。
Geany 关于否定断言的文档使它们看起来是可能的。
作为参考,这有效并给了我结果:
pcregrep -r "(?<!= )function\(" src/main-js/
但是,从 Geany (v 1.24.1) 启动时,相同的正则表达式或任何具有负面后视的正则表达式都不会给我任何结果
哪里有问题?文档有错吗?
精度:主题不是关于如何避免在后面做负面观察,而是关于如何在后面做任何标准的PCRE负面观察。
我在Freenode上得到了 Geany 开发人员的支持,这非常有帮助。这是他们告诉我的:
记录在案的 RE 语法仅适用于 Geany 直接使用的 RE 引擎(例如在 Find 中),但 Find in Files 功能调用 grep 工具(在首选项->工具->grep 中配置),它有自己的语法。对于 GNU grep,您可以在对话框的“额外选项”字段中添加“-P”
但是,在您尝试之后,您遇到了这个错误:
/bin/grep: 指定了冲突的匹配器
...我被告知这是一个 Geany 错误。Geany 调用grep -E
, 并且-P
不兼容。
您唯一的解决方法是使用调用grep的shell 脚本-P
而不是-E
,并使用此脚本。您应该能够配置 grep 工具以调用 Geany 首选项。
上述shell脚本的一个例子:
#!/bin/sh
matchopts=$(echo "$1" | tr E P)
shift
exec grep $matchopts "$@"
Geany 对 grep 使用or -F
(-E
这些是 POSIX grep 中唯一可用的引擎),因此您无法通过-P
.
我已经向 Geany 开发人员报告了这个错误。
另一种解决方法是避免负面的后向断言......但它更难看:
(^.?|[^=] |=[^ ]|[^=][^ ])function