使用 Regex 查找不在评论中的 "goals" 范围

Find range of "goals" that aren't in comments with Regex

也许这很简单,但我还没有找到一种方法来实现正则表达式的以下行为。我想匹配以 {! 开头并以 !} 结尾的子字符串。我试过以下正则表达式:{!.*!}。但我想排除那些以行 -- 开头的内容。

例如,假设我们有三行:

-- Here is some comment {!0-goal!}
{!1-goal!}
Here is some text and {!3-goal!}

我想匹配 {!1-goal!}{!2-goal!},但不匹配 {!0-goal!}。有什么建议吗?

扩展问题:

事实证明,我还需要解析这种 "goals"。

https://regex101.com/r/xL1eY3/5

怎么样?我认为这可能很难实现,对吧?如果有人可以帮助我,我将非常感激。如果没有,我将在 Objective-C 中为此编写自己的解析器,但出于明显的原因我想避免这种情况:)

您可以使用捕获组执行此操作:

^(?!--).*(\{![^!]*!\})

请注意此正则表达式需要一个 m(多行)标志。在 Objective-C 中,那将是 NSRegularExpressionAnchorsMatchLines。并获取存储在第一个捕获组中的值。

参见demo

编辑

仅使用正则表达式无法获得更新输入的结果。问题是 Objective C 正则表达式不支持可变宽度后视。所以,你需要的解决方案是

您可以使用以下方式进行匹配:

/^(?!\s*--).*({!(?:(?!!}).)+!})/gm

并提取 </code>(第 1 组)</p> <p>见<a href="https://regex101.com/r/nX6cI0/1" rel="nofollow">DEMO</a></p> <p>解释:</p> <ul> <li><code>^(?!\s*--)--(space) -- 以外的任何内容开始的前瞻断言