【发布时间】: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 在实现上似乎有很多变化......