C++11のregexを用い、文字列から日付を取得しようとしています。
C++
1#include <regex> 2#include <iostream> 3int main( void ) { 4 std::basic_regex<wchar_t> re( LR"(^(((\d{1,4})[\-/]){1,2}(\d{1,4}))($|[^\d\-/]))" ); 5 std::wcmatch results; 6 if ( std::regex_search( L"2019/08/29", results, re )== false ) { 7 return 0; 8 } 9 for ( int i = 0; i < results.size( ); i++ ) { 10 std::wcout << L"#" << results[i].str( ).c_str( ) << L"#" << std::endl; 11 } 12 return 0; 13}
のように年月日でも年月でもよいように、最初の1~2項目は量指定子{1,2}を用い、2もしくは3番目の項目は単独で、末尾は4番目の項目が存在しないように($|[^\d-/])としています。
この出力が
output
1#2019/08/29# 2#2019/08/29# 3#08/# 4#08# 5#29# 6##
と表示され、全体のサブマッチは正しく取得されているので、正しくマッチングしているようですが、キャプチャされている文字列は、量指定子で反復した2番目の数字08と最後の数字29のみで、最初の数字2019が取得できていません。
量指定子で反復したキャプチャは上書きされてしまうように見えるのですが、どのようにすれば全ての数字をキャプチャすることができるでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/31 07:08
2019/08/31 09:16