私はCでregexec()関数を使用しています。私は基本的に正規表現を書いて文字列の一部を取り込みます。POSIX C regexec()ですべての繰り返し一致のオフセットを取得するには?
たとえば、 "Hello $ X"という文字列がある場合、 "$ X"というようにregexecで範囲6,7を指定します。置換の任意の数が存在することができるようしかし、私は正規表現を使用しています:
"([^$]*(\\$[A-Za-z][A-Za-z0-9_]*))+"
は、これは、テキスト+置換パターンの任意のシーケンスと一致する必要があります。
例えば "First = $ X、Second = $ Y"という文字列の場合、$ Xはオフセット6-7で発生し、$ Yはオフセット17-18で発生したことを知る必要があります。私はregexecはから入手
実際のオフセットは、以下のとおりです。 0,19 8,19 17,19
まず、私は終了オフセットが実際に試合の文字過去1であることを理解しています。したがって、上記のオフセットは、文字列の以下の部分に対応しています。
First=$X, Second=$Y
, Second=$Y
$Y
今、私はここで何が起こっているかを見ることができます:最初の範囲は明らかに全体の試合であり、第二は、最初の全体サブ試合です2番目の部分式。しかし、この点から私は困惑しています。なぜ、最初のサブ式ではなく、2番目のサブ式の最初の部分一致のみを返しますか?
私は繰り返し表現があるという事実とは関係がありますが、問題を解決するために何をする必要があるのか分かりません。どのようにして希望のオフセットを返すのですか?
注:128要素のregmatch_tをregexec()(nmatch = 128)に渡していますので、すべての一致を取得できるはずです。