也许这很简单,但我还没有找到一种方法来实现正则表达式的以下行为。我希望匹配以{!
开头并以!}
结尾的子字符串。我尝试过以下正则表达式:{!.*!}
。但我想排除那些以行--
开头的行。
例如,我们说我们有三行:
-- 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中编写自己的解析器,但我想避免这种情况,原因很明显:)
答案 0 :(得分:2)
您可以使用捕获组执行此操作:
^(?!--).*(\{![^!]*!\})
请注意此正则表达式需要m
(多行)标记。在Objective-C中,这将是NSRegularExpressionAnchorsMatchLines。并获取存储在第一个捕获组中的值。
请参阅demo。
编辑:
仅使用正则表达式无法获得更新输入的结果。问题是Objective C正则表达式不支持可变宽度的后视。所以,你需要的解决方案是
--
开头,则将其丢弃--
开头,请应用(?=(\{!(?:[^!]|\{![^!]*!\})*!\}))
正则表达式。答案 1 :(得分:1)
您可以使用以下内容进行匹配:
/^(?!\s*--).*({!(?:(?!!}).)+!})/gm
并提取$1
(第1组)
请参阅DEMO
说明:
^(?!\s*--)
前瞻性断言,以--
或(space) --