Googleのre2正規表現ライブラリをラップするRubyC ++拡張機能を作成しましたが、ライブラリの最近の更新により、関数のインターフェイスが次のように変更されました。Match()
bool Match(const StringPiece& text,
int startpos,
Anchor anchor,
StringPiece *match,
int nmatch) const;
に:
bool Match(const StringPiece& text,
int startpos,
int endpos,
Anchor anchor,
StringPiece *match,
int nmatch) const;
(新しいint endpos
引数に注意してください。)
VERSION
私の質問は、re2がイントロスペクトできる定数を指定していないように見えるにもかかわらず、このライブラリの両方のバージョンを1つの拡張機能でサポートすることは可能ですか?
理想的には、新しいバージョン(6つの引数を使用)を試して、失敗した場合は、古いバージョンにフォールバックできるようにしたいです(endpos
引数を簡単に埋め戻すことができるため)。
現時点では、私のコードは次のようになっています。
matched = p->pattern->Match(text_as_string_piece, 0, (int)RSTRING_LEN(text), RE2::UNANCHORED, 0, 0);
ただし、古いバージョンのre2を使用している場合は、次のようにする必要があります。
matched = p->pattern->Match(text_as_string_piece, 0, RE2::UNANCHORED, 0, 0);