1. ホーム
  2. regex

[解決済み] 2文字の間に含まれる文字列を、区切り文字を除いて検索する正規表現

2022-03-24 13:41:46

質問

ある文字列から、2つの区切り文字の間に含まれる文字のセットを抽出したいのですが、区切り文字自体を返すことはできません。

簡単な例があると助かります。

対象 : 角括弧の間の部分文字列を抽出し、括弧自体を返しません。

ベースとなる文字列 : This is a test string [more or less]

以下のようなREGを使用した場合。

\[.*?\]

マッチは [more or less] . を取得する必要があります。 more or less (ブラケットなし)。

可能なのでしょうか?

どのように解決するのですか?

簡単にできます。

(?<=\[)(.*?)(?=\])

技術的には、ルックアヘッドとルックビハインドを使うことになります。参照 ルックヘッドとルックビハインドゼロ幅のアサーション . パターンで構成されています。

  • の前には [ をキャプチャしない(lookbehind)。
  • 欲張らないキャプチャーグループ。で止めるのは非貪欲です。 ] そして
  • が続くと ] が捕捉されない(ルックアヘッド)。

あるいは、角括弧の間だけをキャプチャすることもできます。

\[(.*?)\]

で、マッチ全体ではなく、最初にキャプチャされたグループを返します。