【问题标题】:Are negative lookbehind in regex searches possible in Geany?在 Geany 中是否可以在正则表达式搜索中进行负面回溯?
【发布时间】:2015-05-16 00:14:13
【问题描述】:
Geany's documentation on negative assertions 让它看起来是可能的。
作为参考,这有效并给了我结果:
pcregrep -r "(?<!= )function\(" src/main-js/
但是,从 Geany (v 1.24.1) 启动时,相同的正则表达式,或 任何具有负面后视的正则表达式,都不会给我任何结果
问题出在哪里?文档有错吗?
精确度:主题不是关于如何避免在后面做负面的观察,而是关于如何做任何标准的PCRE负面观察。 p>
【问题讨论】:
标签:
regex
pcre
geany
negative-lookbehind
【解决方案1】:
我在 Freenode 上获得了 Geany 开发人员的支持,这对我很有帮助。这是他们告诉我的:
文档中的 RE 语法仅适用于直接使用的 RE 引擎
Geany(例如在 Find 中),但 Find in Files 功能调用 grep 工具
(在首选项->工具->grep中配置),它有自己的语法。
对于 GNU grep,您可以在
对话框
但是,在你尝试之后,你遇到了这个错误:
/bin/grep: 指定了冲突的匹配器
... 我被告知这是一个 Geany 错误。 Geany 调用grep -E,与-P 不兼容。
您唯一的解决方法是使用-P 而不是-E 调用grep 的shell 脚本,并使用此脚本。您应该能够配置 grep 工具以调用 Geany 首选项。
上述shell脚本的一个例子:
#!/bin/sh
matchopts=$(echo "$1" | tr E P)
shift
exec grep $matchopts "$@"
Geany 使用 either -F or -E(这些是 POSIX grep 中唯一可用的引擎)进行 grep,因此您无法通过 -P。
我已经向 Geany 开发者报告了the bug。
【解决方案2】:
另一种解决方法是避免消极的lookbehind断言......但它更难看:
(^.?|[^=] |=[^ ]|[^=][^ ])function