sub_match

template<class BidirectionalIterator>
class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>

正規表現が他の多くの単純なパターンマッチアルゴリズムと異なるのは、マッチを発見するだけでなく、部分式のマッチを生成する点である。各部分式はパターン中の括弧の組 (...) により、その範囲が与えられる。部分式マッチをユーザに知らせるために何らかの方法が必要である。部分式マッチの添字付きコレクションとして振舞う match_results クラスの定義がそれであり、各部分式マッチは sub_match 型オブジェクトが保持する。

sub_match 型のオブジェクトは match_results 型のオブジェクトの配列要素としてのみ取得可能である。

sub_match 型のオブジェクトは std::basic_stringconst charT*const charT 型のオブジェクトと比較可能である。

sub_match 型のオブジェクトは std::basic_stringconst charT*const charT 型のオブジェクトに追加して新しい std::basic_string オブジェクトを生成可能である。

sub_match 型のオブジェクトで示されるマーク済み部分式が正規表現マッチに関与していれば matched メンバはと評価され、メンバ firstsecond はマッチを形成する文字範囲 [first,second) を示す。それ以外の場合は matchedであり、メンバ firstsecond は未定義の値となる。

sub_match 型のオブジェクトで示されるマーク済み部分式が繰り返しになっている場合、その sub_match オブジェクトが表現するのは最後の繰り返しに対応するマッチである。すべての繰り返しに対応するすべての捕捉の完全なセットは captures メンバ関数でアクセス可能である(効率に関して深刻な問題があり、この機能は明示的に有効にしなければならない)。

sub_match 型のオブジェクトが部分式 0(マッチ全体)を表現する場合、メンバ matched は常にである。ただし正規表現アルゴリズムにフラグ match_partial を渡して結果が部分マッチとなる場合はこの限りではなく、メンバ matched、メンバ firstsecond は部分マッチを形成する文字範囲を表現する。

#include <boost/regex.hpp>

namespace boost{

template <class BidirectionalIterator>
class sub_match;

typedef sub_match<const char*>                    csub_match;
typedef sub_match<const wchar_t*>                 wcsub_match;
typedef sub_match<std::string::const_iterator>    ssub_match;
typedef sub_match<std::wstring::const_iterator>   wssub_match;

template <class BidirectionalIterator>
class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>
{
public:
   typedef typename iterator_traits<BidirectionalIterator>::value_type       value_type;
   typedef typename iterator_traits<BidirectionalIterator>::difference_type  difference_type;
   typedef          BidirectionalIterator                                    iterator;

   bool matched;

   difference_type length()const;
   operator basic_string<value_type>()const;
   basic_string<value_type> str()const;

   int compare(const sub_match& s)const;
   int compare(const basic_string<value_type>& s)const;
   int compare(const value_type* s)const;
#ifdef BOOST_REGEX_MATCH_EXTRA
   typedef {implementation-private capture_sequence_type;
   const capture_sequence_type& captures()const;
#endif
};
//
// sub_match 同士の比較:
//
template <class BidirectionalIterator>
bool operator == (const sub_match<BidirectionalIterator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator != (const sub_match<BidirectionalIterator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator < (const sub_match<BidirectionalIterator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator <= (const sub_match<BidirectionalIterator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator >= (const sub_match<BidirectionalIterator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator > (const sub_match<BidirectionalIterator>& lhs,
                 const sub_match<BidirectionalIterator>& rhs);

//
// basic_string との比較:
//
template <class BidirectionalIterator, class traits, class Allocator>
bool operator == (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator != (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator < (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                         traits,
                                         Allocator>& lhs,
                 const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator > (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                         traits,
                                         Allocator>& lhs,
                 const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator >= (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator <= (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator == (const sub_match<BidirectionalIterator>& lhs,
                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator != (const sub_match<BidirectionalIterator>& lhs,
                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator < (const sub_match<BidirectionalIterator>& lhs,
                 const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                         traits,
                                         Allocator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator > (const sub_match<BidirectionalIterator>& lhs,
                 const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                         traits,
                                         Allocator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator >= (const sub_match<BidirectionalIterator>& lhs,
                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& rhs);
template <class BidirectionalIterator, class traits, class Allocator>
bool operator <= (const sub_match<BidirectionalIterator>& lhs,
                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,
                                          traits,
                                          Allocator>& rhs);

//
// 文字列ポインタとの比較:
//
template <class BidirectionalIterator>
bool operator == (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator != (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator < (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
                 const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator > (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
                 const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator >= (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator <= (typename iterator_traits<BidirectionalIterator>::value_type const* lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator == (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs);
template <class BidirectionalIterator>
bool operator != (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs);
template <class BidirectionalIterator>
bool operator < (const sub_match<BidirectionalIterator>& lhs,
                 typename iterator_traits<BidirectionalIterator>::value_type const* rhs);
template <class BidirectionalIterator>
bool operator > (const sub_match<BidirectionalIterator>& lhs,
                 typename iterator_traits<BidirectionalIterator>::value_type const* rhs);
template <class BidirectionalIterator>
bool operator >= (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs);
template <class BidirectionalIterator>
bool operator <= (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const* rhs);

//
// 1 文字との比較:
//
template <class BidirectionalIterator>
bool operator == (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator != (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator < (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
                 const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator > (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
                 const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator >= (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator <= (typename iterator_traits<BidirectionalIterator>::value_type const& lhs,
                  const sub_match<BidirectionalIterator>& rhs);
template <class BidirectionalIterator>
bool operator == (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs);
template <class BidirectionalIterator>
bool operator != (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs);
template <class BidirectionalIterator>
bool operator < (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs);
template <class BidirectionalIterator>
bool operator > (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs);
template <class BidirectionalIterator>
bool operator >= (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs);
template <class BidirectionalIterator>
bool operator <= (const sub_match<BidirectionalIterator>& lhs,
                  typename iterator_traits<BidirectionalIterator>::value_type const& rhs);

//
// 加算演算子:
//
template <class BidirectionalIterator, class traits, class Allocator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator>
   operator + (const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type,
                                       traits,
                                       Allocator>& s,
            const sub_match<BidirectionalIterator>& m);
template <class BidirectionalIterator, class traits, class Allocator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator>
   operator + (const sub_match<BidirectionalIterator>& m,
               const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type,
                                       traits,
                                       Allocator>& s);
template <class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>
   operator + (typename iterator_traits<BidirectionalIterator>::value_type const* s,
               const sub_match<BidirectionalIterator>& m);
template <class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>
   operator + (const sub_match<BidirectionalIterator>& m,
               typename iterator_traits<BidirectionalIterator>::value_type const * s);
template <class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>
   operator + (typename iterator_traits<BidirectionalIterator>::value_type const& s,
               const sub_match<BidirectionalIterator>& m);
template <class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>
   operator + (const sub_match<BidirectionalIterator>& m,
               typename iterator_traits<BidirectionalIterator>::value_type const& s);
template <class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>
   operator + (const sub_match<BidirectionalIterator>& m1,
               const sub_match<BidirectionalIterator>& m2);

//
// ストリーム挿入子:
//
template <class charT, class traits, class BidirectionalIterator>
basic_ostream<charT, traits>&
   operator << (basic_ostream<charT, traits>& os,
                const sub_match<BidirectionalIterator>& m);

} // namespace boost

説明

メンバ

typedef typename std::iterator_traits<iterator>::value_type value_type

イテレータが指す型。

typedef typename std::iterator_traits<iterator>::difference_type difference_type

2 つのイテレータの差を表す型。

typedef BidirectionalIterator iterator

イテレータ型。

iterator first

マッチの先頭位置を示すイテレータ。

iterator second

マッチの終端位置を示すイテレータ。

bool matched

この部分式がマッチしているかを示す論理値。

difference_type length() const
効果

マッチした部分式の長さを返す。この部分式がマッチしなかった場合は 0 を返す。matched ?distance(first, second): 0 と同じ。

operator basic_string<value_type>() const
効果

*this を文字列に変換する。(matched ?basic_string<value_type>(first, second):basic_string<value_type>()) を返す。

basic_string str() const
効果

*this の文字列表現を返す。(matched ?basic_string<value_type>(first, second):basic_string<value_type>()) と同じ。

int compare(const sub_match &s) const
効果

*thisd と字句的比較を行う。str().compare(s.str()) を返す。

int compare(const basic_string<value_type> &s) const
効果

*this と文字列 s を比較する。str().compare(s) を返す。

int compare(const value_type *s) const
効果

*this と null 終端文字列 s を比較する。str().compare(s) を返す。

typedef implementation_private capture_sequence_type
効果

標準ライブラリ Sequence の要件(21.1.1 および表 68 の操作)を満たす実装固有の型を定義する。その value_typesub_match<BidirectionalIterator> である。この型が std::vector<sub_match<BidirectionalIterator> > となる可能性もあるが、それに依存すべきではない。

const capture_sequence_type &captures() const
効果

この部分式に対するすべての捕捉を格納したシーケンスを返す。

事前条件

BOOST_REGEX_MATCH_EXTRA を使ってライブラリをビルドしていなければ、このメンバ関数は定義されない。また正規表現マッチ関数(regex_matchregex_searchregex_iteratorregex_token_iterator)にフラグ match_extra を渡していなければ、有用な情報を返さない。

根拠

この機能を有効にするといくつか影響がある。

  • sub_match がより多くのメモリを占有し、複雑な正規表現をマッチする場合にすぐにメモリやスタック空間の不足に陥る。

  • match_extra を使用しない場合であっても、処理する機能(例えば独立部分式)によってはマッチアルゴリズムの効率が落ちる。

  • match_extra を使用するとさらに効率が落ちる(速度が低下する)。ほとんどの場合、さらに必要なメモリ割り当てが起こる。

sub_match 非メンバ演算子

template<class BidirectionalIterator>
bool operator==(const sub_match<BidirectionalIterator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs.compare(rhs) == 0 を返す。

template<class BidirectionalIterator>
bool operator!=(const sub_match<BidirectionalIterator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs.compare(rhs) != 0 を返す。

template<class BidirectionalIterator>
bool operator<<(const sub_match<BidirectionalIterator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs.compare(rhs) < 0 を返す。

template<class BidirectionalIterator>
bool operator<=(const sub_match<BidirectionalIterator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs.compare(rhs) <= 0 を返す。

template<class BidirectionalIterator>
bool operator>=(const sub_match<BidirectionalIterator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs.compare(rhs) >= 0 を返す。

template<class BidirectionalIterator>
bool operator>(const sub_match<BidirectionalIterator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs.compare(rhs) > 0 を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator==(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs == rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator!=(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs != rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator<<(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs < rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator>(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs > rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator>=(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs >= rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator<=(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs <= rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator==(const sub_match<BidirectionalIterator> &lhs, const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &rhs)
効果

lhs.str() == rhs を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator!=(const sub_match<BidirectionalIterator> &lhs, const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &rhs)
効果

lhs.str() != rhs を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator<(const sub_match<BidirectionalIterator> &lhs, const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &rhs)
効果

lhs.str() < rhs を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator>(const sub_match<BidirectionalIterator> &lhs, const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &rhs)
効果

lhs.str() > rhs を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator>=(const sub_match<BidirectionalIterator> &lhs, const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &rhs)
効果

lhs.str() >= rhs を返す。

template<class BidirectionalIterator, class traits, class Allocator>
bool operator<=(const sub_match<BidirectionalIterator> &lhs, const std::basic_string<iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &rhs)
効果

lhs.str() <= rhs を返す。

template<class BidirectionalIterator>
bool operator==(typename iterator_traits<BidirectionalIterator>::value_type const *lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs == rhs.str() を返す。

template<class BidirectionalIterator>
bool operator!=(typename iterator_traits<BidirectionalIterator>::value_type const *lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs != rhs.str() を返す。

template<class BidirectionalIterator>
bool operator<(typename iterator_traits<BidirectionalIterator>::value_type const *lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs < rhs.str() を返す。

template<class BidirectionalIterator>
bool operator>(typename iterator_traits<BidirectionalIterator>::value_type const *lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs > rhs.str() を返す。

template<class BidirectionalIterator>
bool operator>=(typename iterator_traits<BidirectionalIterator>::value_type const *lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs >= rhs.str() を返す。

template<class BidirectionalIterator>
bool operator<=(typename iterator_traits<BidirectionalIterator>::value_type const *lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs <= rhs.str() を返す。

template<class BidirectionalIterator>
bool operator==(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const *rhs)
効果

lhs.str() == rhs を返す。

template<class BidirectionalIterator>
bool operator!=(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const *rhs)
効果

lhs.str() != rhs を返す。

template<class BidirectionalIterator>
bool operator<(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const *rhs)
効果

lhs.str() < rhs を返す。

template<class BidirectionalIterator>
bool operator>(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const *rhs)
効果

lhs.str() > rhs を返す。

template<class BidirectionalIterator>
bool operator>=(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const *rhs)
効果

lhs.str() >= rhs を返す。

template<class BidirectionalIterator>
bool operator<=(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const *rhs)
効果

lhs.str() <= rhs を返す。

template<class BidirectionalIterator>
bool operator==(typename iterator_traits<BidirectionalIterator>::value_type const &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs == rhs.str() を返す。

template<class BidirectionalIterator>
bool operator!=(typename iterator_traits<BidirectionalIterator>::value_type const &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs != rhs.str() を返す。

template<class BidirectionalIterator>
bool operator<(typename iterator_traits<BidirectionalIterator>::value_type const &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs < rhs.str() を返す。

template<class BidirectionalIterator>
bool operator>(typename iterator_traits<BidirectionalIterator>::value_type const &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs > rhs.str() を返す。

template<class BidirectionalIterator>
bool operator>=(typename iterator_traits<BidirectionalIterator>::value_type const &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs >= rhs.str() を返す。

template<class BidirectionalIterator>
bool operator<=(typename iterator_traits<BidirectionalIterator>::value_type const &lhs, const sub_match<BidirectionalIterator> &rhs)
効果

lhs <= rhs.str() を返す。

template<class BidirectionalIterator>
bool operator==(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const &rhs)
効果

lhs == rhs.str() を返す。

template<class BidirectionalIterator>
bool operator!=(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const &rhs)
効果

lhs != rhs.str() を返す。

template<class BidirectionalIterator>
bool operator<<(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const &rhs)
効果

lhs < rhs.str() を返す。

template<class BidirectionalIterator>
bool operator>(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const &rhs)
効果

lhs > rhs.str() を返す。

template<class BidirectionalIterator>
bool operator>=(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const &rhs)
効果

lhs >= rhs.str() を返す。

template<class BidirectionalIterator>
bool operator<=(const sub_match<BidirectionalIterator> &lhs, typename iterator_traits<BidirectionalIterator>::value_type const &rhs)
効果

lhs <= rhs.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> operator+(const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &s, const sub_match<BidirectionalIterator> &m)

sub_match の加算演算子により、basic_string に追加可能な型に対して sub_match を追加することができ、結果として新しい文字列を得る。

効果

s + m.str() を返す。

template<class BidirectionalIterator, class traits, class Allocator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> operator+(const sub_match<BidirectionalIterator> &m, const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator> &s)
効果

m.str() + s を返す。

template<class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> operator+(typename iterator_traits<BidirectionalIterator>::value_type const *s, const sub_match<BidirectionalIterator> &m)
効果

s + m.str() を返す。

template<class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> operator+(const sub_match<BidirectionalIterator> &m, typename iterator_traits<BidirectionalIterator>::value_type const *s)
効果

m.str() + s を返す。

template<class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> operator+(typename iterator_traits<BidirectionalIterator>::value_type const &s, const sub_match<BidirectionalIterator> &m)
効果

s + m.str() を返す。

template<class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> operator+(const sub_match<BidirectionalIterator> &m, typename iterator_traits<BidirectionalIterator>::value_type const &s)
効果

m.str() + s を返す。

template<class BidirectionalIterator>
std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type> operator+(const sub_match<BidirectionalIterator> &m1, const sub_match<BidirectionalIterator> &m2)
効果

m1.str() + m2.str() を返す。

ストリーム挿入子

template<class charT, class traits, class BidirectionalIterator>
basic_ostream<charT, traits> &operator<<(basic_ostream<charT, traits> &os, const sub_match<BidirectionalIterator> &m)
効果

(os << m.str()) を返す。