Dartの正規表現を触ってみよう

こんにちは。 エキサイトの奥田です。

Advent Calendarの季節が今年もやってきました。
昨年同様、エキサイトホールディングス Advent Calendarで毎日投稿される予定です。 様々な話題が投稿されるのでぜひ閲覧してみてください!

qiita.com

本日は正規表現を用いてパイプで区切られた文字列を加工する方法について記事を書いていきます。

[calendar|advent|take|a|at|look|our]を加工しよう!

  String _covertText() {
    const text = '[calendar|advent|take|a|at|look|our]';
    final textMatchPattern = RegExp(
        //r'...'の中で指定された文字列は生の文字列として認識されます。
        //([a-z]+)では半角英語(aからz)が1文字以上のものが該当します。
        r'\[([a-z]+)\|([a-z]+)\|([a-z]+)\|([a-z]+)\|([a-z]+)\|([a-z]+)\|([a-z]+)]');
    return text.replaceAllMapped(textMatchPattern, (match) {
       //match.group(1)では正規表現のサブパターンにマッチした対象が取得できます。(今回はcalendarが該当します)
       //それぞれサブパターンにマッチした文字列を取得し、意図する形に加工しています。
      final replaceText =
          '${match.group(3)!} ${match.group(4)!} ${match.group(6)!} ${match.group(5)!} ${match.group(7)!} ${match.group(2)!} ${match.group(1)!}';

      print(replaceText);
      return replaceText;
    });
  }

実行結果
==

take a look at our advent calendar

==

対象の文字列をreplaceAllMappedを使用しパターンにマッチしたものを変換しています。 グループで区切ることでパイプで繋がれた文字をそれぞれ取得することができます。 あとは対象の文字列を意図する形に並び替えることができます!

まとめ

今回は文字列を加工し、意図する文字列に加工することができました。 Dartでも正規表現を使用した文字列の加工はできそうです。 出力したtake a look at our advent calendarにもあるように今後もAdvent Calendarが更新されますのでぜひみていただけると幸いです!

最後に

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。 カジュアル面談はこちらになります! meety.net

募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com