在多行之间匹配起点和终点之间的包含

时间:2017-03-04 17:12:05

标签: regex

我有大量的Toml文件,其中一些包含我想删除的参数。我在构建与起始文本categories =和结尾文本]匹配的正则表达式时遇到了困难。根据下面的示例,我的正则表达式匹配开始和结束文本之间的文本,但不包括开始和结束文本本身。如何修改正则表达式以捕获开始和结束文本之间的所有内容?

我目前的正则表达式是:(?<=categories)(.*)(?=])

示例.toml包含:

+++
slug = "twenty-years-from-now-you-will-be-more"
description = ""
tags = [
  "Quoteoftheday",
  "Quote",
]
categories = [
  "Quoteoftheday",
  "Quote",
]
date = 2014-01-16T07:13:10-08:00
title = "twenty years from now..."
draft = false

+++

我想用正则表达式捕获的文本是:

categories = [
  "Quoteoftheday",
  "Quote",
]

示例代码为here.

2 个答案:

答案 0 :(得分:1)

尝试使用以下正则表达式

(?s)categories[\s=\[]+(.*?)]

<强>解释

  • (?s)单行标记/修饰符
  • categories[\s=\[]+匹配'categories'和任何space = [
  • (.*?)]匹配任何字符和]

<强> DEMO

答案 1 :(得分:1)

使用否定字符类,您可以在没有DOTALLs标记的情况下使其工作,以便它可以使用{J}支持DOTALL之类的风格。

\ncategories([^]]*)\]

RegEx Demo

要使其与sed一起使用,请使用此命令:

sed -i.bak '/^categories[ \t]*=/,/\]/d' file

cat file

+++
slug = "twenty-years-from-now-you-will-be-more"
description = ""
tags = [
  "Quoteoftheday",
  "Quote",
]
date = 2014-01-16T07:13:10-08:00
title = "twenty years from now..."
draft = false

+++