私はCでregexec()関数を使用しています。基本的に、置換のために文字列の一部をキャプチャする正規表現を作成しようとしています。
たとえば、文字列「Hello $ X」がある場合、regexecで範囲6,7を指定して「$X」にします。ただし、任意の数の置換が存在する可能性があるため、正規表現を使用しています。
"([^$]*(\\$[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番目の部分式の最初の完全な部分一致です。しかし、この時点から私は困惑しています。最初の部分式ではなく、2番目の部分式の最初の部分一致のみを返すのはなぜですか?
繰り返し表現していることと関係があるのではないかと思いますが、問題を解決するために何をすればいいのかわかりません。目的のオフセットを返すにはどうすればよいですか?
注:128要素のregmatch_tをregexec()(nmatch = 128)に渡すので、すべての一致を取得できるはずです。