正規表現で括弧の中身を取得する
はじめに
個人開発で:
に囲まれたタグの中身を取得したい場面があり、今後も括弧()
などでの使用場面がありそうなのでメモしておく。
実装コードはGo言語。
括弧の含めて中身を取得する正規表現
ポイントは?
を使って最短モードで検索を行うこと。?
をつけないと貪欲モードで検索されてしまい、もし文の中に閉じ括弧が2個以上あれば最後のものまでマッチしてしまう。
import "regexp"
content := regexp.MustCompile(`\(.*?\)`).FindString(text)
括弧の中身だけを取得する正規表現
正規表現でマッチするかどうかチェックするが取得はしたくない場合は、肯定先読み(?=パターン)
(肯定後読み(?<=パターン)
)を使うと良いとあったので今回のユースケースに合わせて作成した正規表現が以下。
(?<=\()).*?(?=\))
これを使ってGoで実行してみると以下のエラーが出た。
panic: regexp: Compile(`(?<=\().*?(?=\()`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`
どうやらGoでは肯定先読みがまだサポートされていないらしい。仕方ないのでstrings
パッケージのTrimPrefix
とTrimRight
で対応した。
おわり
()
の例を紹介したが、<>
や「」
でも利用できる。その際はエスケープする必要はないので注意。