在 Geany 中是否可以在正则表达式搜索中进行负面回顾?
Are negative lookbehind in regex searches possible in Geany?
Geany's documentation on negative assertions 看起来它们是可能的。
作为参考,这个有效并给出了结果:
pcregrep -r "(?<!= )function\(" src/main-js/
但是相同的正则表达式,或任何具有负面回顾的正则表达式,从 Geany (v 1.24.1) 启动时没有给我任何结果
问题出在哪里?文档有错吗?
精度:主题不是关于如何避免在背后做负面观察,而是关于如何做任何标准PCRE 消极的向后看。
我在 Freenode 上得到了 Geany 开发人员的支持,这非常有帮助。这是他们告诉我的:
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
但是,在您尝试之后,出现了这个错误:
/bin/grep: conflicting matchers specified
... 有人告诉我这是一个 Geany 错误。 Geany 调用 grep -E
,-P
与其不兼容。
您唯一的解决方法是让 shell 脚本使用 -P
而不是 -E
调用 grep,然后使用此脚本。您应该能够配置 grep 工具以调用 Geany 首选项。
上述 shell 脚本的示例:
#!/bin/sh
matchopts=$(echo "" | tr E P)
shift
exec grep $matchopts "$@"
Geany 使用 either -F
or -E
(这些是 POSIX grep 中唯一可用的引擎)用于 grep,因此您不能通过 -P
.
我已向 Geany 开发人员报告 the bug。
另一种解决方法是避免负面的回顾断言……但它更丑陋:
(^.?|[^=] |=[^ ]|[^=][^ ])function
Geany's documentation on negative assertions 看起来它们是可能的。
作为参考,这个有效并给出了结果:
pcregrep -r "(?<!= )function\(" src/main-js/
但是相同的正则表达式,或任何具有负面回顾的正则表达式,从 Geany (v 1.24.1) 启动时没有给我任何结果
问题出在哪里?文档有错吗?
精度:主题不是关于如何避免在背后做负面观察,而是关于如何做任何标准PCRE 消极的向后看。
我在 Freenode 上得到了 Geany 开发人员的支持,这非常有帮助。这是他们告诉我的:
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
但是,在您尝试之后,出现了这个错误:
/bin/grep: conflicting matchers specified
... 有人告诉我这是一个 Geany 错误。 Geany 调用 grep -E
,-P
与其不兼容。
您唯一的解决方法是让 shell 脚本使用 -P
而不是 -E
调用 grep,然后使用此脚本。您应该能够配置 grep 工具以调用 Geany 首选项。
上述 shell 脚本的示例:
#!/bin/sh
matchopts=$(echo "" | tr E P)
shift
exec grep $matchopts "$@"
Geany 使用 either -F
or -E
(这些是 POSIX grep 中唯一可用的引擎)用于 grep,因此您不能通过 -P
.
我已向 Geany 开发人员报告 the bug。
另一种解决方法是避免负面的回顾断言……但它更丑陋:
(^.?|[^=] |=[^ ]|[^=][^ ])function