2017-09-06 14 views
0

文字列に一致させるためにpcre2を使用したいと思います。 たとえば、「a」、「b」、「c」、「d」、「e」の文字列パターンがあります。 私は長いテキスト "str"を照合します。 "str"と一致するパターン "a | b | c | d | e"をpcre2_matchを使って作成します。 一致するパターンを知るにはどうすればよいですか? "a"、 "b"、 "c"、 "d"、 "e"と一致するパターンを比較したくないので、単に "a"や "b"ではなく、もう一度。pcre2で一致するグループ番号を取得する方法

答えて

0

あなたが直接PCRE2ライブラリを使用し、そのすべての機能へのアクセスを持っていると仮定すると、あなたは単純なものから、ほとんど関与し、このためのいくつかのソリューションを持っている:

  • 使用の番号キャプチャグループ:(a)|(b)|(c)|(d)
  • 使用という名前のキャプチャグループ:(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)
  • 使用marksa(*MARK:a)|b(*MARK:b)|c(*MARK:c)|d(*MARK:d)
  • 使用:a(?C{a})|b(?C{b})|c(?C{c})|d(?C{d})
  • あなた本当には番号のキャプチャを使用することにより、一致
+0

の終了前に見た最後のパターンのオフセットをrememeberそして、あなたの入力パターンを変更PCRE2_AUTO_CALLOUTを使用してブランチにパターンオフセットをマッピングするためにいくつかの方法を見つけることができない場合グループ:(a)|(b)|(c)|(d)、一致するグループの数はどのように取得できますか?それはどこに保管されていますか? – johnhypo

+0

@johnhypoこれは[一致データブロック](http://pcre.org/current/doc/html/pcre2api.html#SEC27)にあります。より正確には* ovector *です。それを読んでください[ここ](http://pcre.org/current/doc/html/pcre2api.html#SEC30)。 'ovector [2 * n]!= PCRE2_UNSET'の場合、キャプチャグループ番号** n **が一致するかどうかを知ることができます。 ** n **はインデックス0が完全なパターンを指定するので、1から始まります。代わりに、 'pcre2_match'の戻り値を使用することもできます。これは、設定されている最も高い取得グルー​​プ番号です。 –

+0

少し訂正: 'pcre2_match'の戻り値は** 1 + **最も高い捕捉されたグループ番号です。 –

関連する問題