【问题标题】: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>

【问题讨论】:

  • 试试(?&lt;!=\s)function\(

标签: 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
    

    【讨论】:

      猜你喜欢
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多