【问题标题】:non-greedy / lazy matches with KATE regex与 KATE 正则表达式的非贪婪/惰性匹配
【发布时间】:2023-04-05 03:16:01
【问题描述】:

我试图找到两个单词之间的所有内容(不打算说出哪两个单词,因为我不希望人们尖叫“你不能用正则表达式解析 x,而是使用 x 解析器)。我没有问题找到开始词和结束词 - 除了结束词不是第一个遇到的。

我使用的是这样的:startword((.*\n)*)endword

这并不像留下尾词那么糟糕,它会匹配到文档的末尾。但这不是我需要的。

我读过无数文章说我想要的是一个非贪婪或懒惰的搜索,应该通过放置一个 ?之后 **。当我在 KATE 中尝试时,它什么都不匹配 (startword((.*\n)*?)endword)。

我也对另一种行为感到困惑 - 我有一些文本出现 endword\n\s**endword 但是当我用它来结束比赛时,它也失败了。但是匹配 endword\n\s*endword 本身按预期运行。

有没有办法在 KATE 中执行惰性正则表达式,或者任何人都可以提出其他解决方案?

谢谢。

【问题讨论】:

  • 它以 KatePart 中可用的形式记录正则表达式,该格式与 perl 的正则表达式不兼容,也不与例如 grep 的正则表达式兼容。我>
  • The quantifiers 列出的其中没有惰性量词,因此不受支持。
  • 我看到支持前瞻。试试startword([^e]*(?:e(?!ndword)[^e]*)*)endword (demo)
  • 感谢维克托。不幸的是,我也无法让它发挥作用。 Lookaheads 在实现上似乎有很多变化......

标签: regex kate


【解决方案1】:

出于某种原因(可能与我对正则表达式的理解不足有关),我之前尝试过的方法终于奏效了。与其在起始词和结束词之间设置不定行数,我可以将其指定为不定行数,格式为 (startword2.*endword2)*

这消除了进行惰性评估的需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多