我有一个字符串,它看起来像这样对大括号之间一切删除。使用sed
我应该得到:[master *]
作为最终输出。到目前为止,我的进步:
gsed -E 's/%\{[^\}]*\}//g'
这给:
echo '[%{%B%F{blue}%}master %{%F{red}%}*%{%f%k%b%}%{%f%k%b%K{black}%B%F{green}%}]' | gsed -E 's/%\{[^\}]*\}//g'
[%}master %}*%B%F{green}%}]
所以,这对于%{...}
段里面做不包含%{...}
工作正常。它失败的字符串如%{%B%F{blue}%}
(它返回%}
)。
我想要做的是分析该字符串,直到我找到匹配}
,然后卸下一切到这一点,而不是%{
和第一}
我遇到之间消除一切。我不知道如何做到这一点。
我充分认识到,有可能是多种方式来做到这一点;如果可能的话,我更愿意回答关于问题中指定的方式,但任何想法都是值得欢迎的。
正则表达式不适合匹配嵌套圆括号。嵌套括号不构成常规语言。 –
实际上,你不能使用正则表达式来匹配嵌套的括号,可以匹配高达有越来越长的正则表达式数量有限,但你不能匹配arbitary数。我编写了一次代码生成器来匹配9层嵌套,这是你见过的最大的正则表达式,它不是非常高效的。 – Benj
对于样本输入,预期输出和实际使用的代码+1。祝你好运。 – shellter