首页 > 解决方案 > 用于匹配大括号中的每一行的正则表达式

问题描述

我正在尝试匹配大括号内的每一行,并且我正在努力捕捉我想要的内容。举个例子,如果我有这个文本:

{
  这是一条线,
    这 = 另一行,
    这是第三行!
这确实是另一条线
},
第二轮:{
我们现在在第二对括号上,
  这是最后一行。
}

然后我想匹配并捕获总共六行:

到目前为止,我目前的想法是尝试匹配“大括号”->“任何东西”->“行”->“任何东西”->“大括号”,即这样的:

{(?s)[^}]*(^([^}^\n]+)$)(?s)[^}]*}

但这仅匹配每对花括号中的一行,而不是每一行。

我该怎么做呢?谢谢。


编辑:更新了示例以在一个左大括号和不同的空格之前包含前面的文本。

标签: regex

解决方案


只需匹配不包含大括号的行:

^[^{}\r\n]+$

将设置多行标志 ( /m)。或者,(?m)在正则表达式的开头插入。

演示

正则表达式读取,“匹配行的开头后跟一个或多个字符,而不是,{和,然后是行尾”。}\r\n

要排除每个匹配行中的前导空格,您可以稍微修改正则表达式:

^\s*\K[^{}\r\n]+$

演示

\K重置匹配的起点,不包括任何先前使用的字符。\K并非所有正则表达式引擎都可用。


推荐阅读