Geany中是否支持正则表达式搜索中的负向回顾后断言?

6

Geany的负断言文档让它看起来似乎是可能的。

供参考,这个可以工作并给我结果:

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

但是相同的正则表达式,或者任何具有负回顾后断言的正则表达式,在从Geany(v 1.24.1)启动时没有返回结果。

enter image description here

问题出在哪里?文档有误吗? 精度: 这个话题不是关于如何避免使用负向后瞻,而是关于如何执行任何标准的PCRE负向后瞻。

try (?<!=\s)function\( - Avinash Raj
2个回答

5
我在Freenode得到了Geany开发人员的支持,这非常有帮助。以下是他们告诉我的内容:
引用: 文档化的RE语法仅适用于Geany直接使用的RE引擎(例如在Find中),但“在文件中查找”功能调用grep工具(如在首选项->工具->grep中配置),该工具有自己的语法。对于GNU grep,您可以在对话框中的“额外选项”字段中添加“-P”。
然而,尝试后,您遇到了此错误:
引用: /bin/grep:指定了冲突的匹配器
... 对此我被告知这是Geany的一个错误。Geany调用grep -E,而-P与之不兼容。
你唯一的解决方法是编写一个调用grep并使用-P而不是-E的shell脚本,并使用此脚本。您应该能够在Geany首选项中配置grep工具的调用。
以下是一个示例shell脚本:
#!/bin/sh

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

exec grep $matchopts "$@"

Geany使用 -F-E(这是POSIX grep中唯一可用的引擎),因此您无法传递-P
我已向Geany开发人员报告了该错误

1

另一个解决方法是避免使用负回顾断言...但这样会变得更加丑陋:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接