C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのmatch_results::length()関数の使い方と実例解説

この記事では、C++ STLにおけるmatch_results::length()関数の動作、構文、および具体的な使用例について詳しく解説します。

C++ STLにおけるmatch_resultsとは?

std::match_resultsは、正規表現のマッチ操作によって一致した文字シーケンスのコレクションを格納するために使用される、コンテナのような特殊なクラステンプレートです。このコンテナクラスでは、regexマッチ操作が対象シーケンスに対するマッチを検出し、その結果を保持します。

match_results::length()とは?

match_results::length()関数は、C++ STLに組み込まれている関数であり、<regex>ヘッダーファイルで定義されています。length()は、関連付けられたmatch_resultsオブジェクト内のn番目のマッチの長さを取得するために使用されます。length()は引数としてマッチ番号を受け取り、この番号はmatch_results::size()よりも小さい値である必要があります。

構文

smatch_name.length(unsigned int num);

パラメータ

この関数は1つのパラメータを受け取ります。これは、コンテナのサイズより小さいマッチ番号です。マッチ番号0は、正規表現全体のマッチを表します。

戻り値

この関数は、指定されたマッチの長さをunsigned整数型の値として返します。

入力: std::smatch;
   smatch.length(0);
出力: 0

例:マッチ結果の表示

#include <bits/stdc++.h>
using namespace std;
int main() {
   string str = "TutorialsPoint";
   regex R("(Tutorials)(.*)");
   smatch Mat;
   regex_match(str, Mat, R);
   for (int i = 0; i < Mat.size(); i++) {
      cout<<"Match is : " << Mat[i]<< endl;
   }
   return 0;
}

出力

上記のコードを実行すると、以下の出力が生成されます −

Match is : TutorialsPoint
Match is : Tutorials
Match is : Point

この例では、正規表現「(Tutorials)(.*)」を使って文字列「TutorialsPoint」とのマッチを行っています。マッチ番号0は正規表現全体のマッチ(TutorialsPoint)、マッチ番号1は最初のキャプチャグループ(Tutorials)、マッチ番号2は2番目のキャプチャグループ(Point)に対応しています。

例:最も長いマッチの長さを求める

#include <bits/stdc++.h>
using namespace std;
int main() {
   string sr = "Tutorials Point";
   regex Re("(Tutorials)(.*)");
   smatch Mat;
   regex_match(sr, Mat, Re);
   int len = 0;
   string str;
   for (int i = 1; i < Mat.size(); i++) {
      if (Mat.length(i) > len) {
         str = Mat[i];
         len = Mat.length(i);
      }
   }
   cout<<"Match length is of: " << len;
   return 0;
}

出力

上記のコードを実行すると、以下の出力が生成されます −

Match length is of: 9

この例では、length()関数を使って各キャプチャグループの長さを順に比較し、最も長いマッチの長さを出力しています。マッチ番号1の「Tutorials」は9文字であるため、結果として9が出力されます。このようにlength()を活用することで、正規表現の各グループが実際にどれだけの文字列にマッチしたかを簡単に確認できます。

  1. C++ STL入門:setとunordered_setの違いを徹底解説

    本記事では、C++ STLにおける set と unordered_set の概要をわかりやすく解説し、両者の違いについても詳しく学んでいきます。 setとは? set(セット)は、Key型の一意なオブジェクトをソート済みの状態で格納する連想コンテナです。各要素は一度しか出現できず、重複した値は許されません。ユーザーは任意の順序で要素を挿入してsetを作成できますが、setは常にソートされた形でデータを返します。つまり、setにはデータを並べ替えるための仕組みが内部に組み込まれており、その処理はユーザーから抽象化されています。 setを使うべき主なケースは以下の通りです。 ソート済みのデ

  2. C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード

    C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス