2017-03-04 11 views
1

大量の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.

です

答えて

1

否定文字クラスを使用して、あなたはそれがDOTALLはJavascriptのようにサポートされていない味で作業できるように、それはDOTALLまたはsフラグなしで動作することができます。

\ncategories([^]]*)\] 

RegEx Demo


は、それがsed使用してこのコマンドを動作させるために:あなたはこののすべてのインスタンスを削除する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 

+++ 
1

次を試してください正規表現

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

説明

  • (?s)単一ラインフラグ/修飾子
  • categories[\s=\[]+マッチ 'カテゴリー' と空間のインスタンス=
  • (.*?)]一致任意の文字と】

DEMO

+0

これは良い試合を生成し、ディレクトリ内のファイルのセットと一致していますか? – surfearth

関連する問題