0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[C++] 正規表現で文字列から日付の部分を抜き出す

Last updated at Posted at 2020-11-25

もくじ

やりたいこと

ファイル名の文字列に日付を表す部分が含まれてるので、それを抜き出したい。
具体的には、「Log_20201026+0900.csv」みたいな感じでログファイル名に日付が入ってる感じになってるので、「20201026+0900」の部分を抜き出したい。

やり方

正規表現を使う。

サンプル

#include <iostream>
#include <regex>

int main()
{
    // ログファイル名のサンプル
    std::wstring input = L"Log_20201026+0900.csv";
    // 正規表現(数字が8個の後に+or-があって、その後に数字4個、というパターン)
    std::wregex pattern(L"[0-9]{8}[+|-][0-9]{4}");

    std::wsmatch match;
    if (std::regex_search(input, match, pattern))
    {
        std::wcout << match[0].str() << std::endl;
    }

    // regex_searchは、最初にマッチした部分しか取れない
    system("pause");
}

match[0]の中に、ヒットした部分の文字列が入ってくる。
regex_search()は、基本的には検索対象の文字列の中のヒットした1つ目の部分しか取れない様子。
(例えば上のサンプルでL"Log_20201026+0900_20201026+0900.csv"を対象に検索しても、一つ目の「20201026+0900」しか取れない、ということ。)

それを、2つ目以降も取れるようにしようと思うと、見る位置をずらす、などの工夫が必要になる。
こちら参照

参考

C++標準のregex_search(正規表現)の動作と使用方法
https://taiyakisun.hatenablog.com/entry/20140630/1404140319

正規表現関数(MSDocs)
https://docs.microsoft.com/ja-jp/cpp/standard-library/regex-functions?view=msvc-160

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?