找到"目标"与正则表达式

时间:2015-06-01 12:59:48

标签: regex nsregularexpression

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

例如,我们说我们有三行:

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

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

扩展问题:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

请参阅demo

编辑

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

答案 1 :(得分:1)

您可以使用以下内容进行匹配:

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

并提取$1(第1组)

请参阅DEMO

说明:

  • ^(?!\s*--)前瞻性断言,以--(space) --
  • 以外的任何内容开头