2

そのようなコードを考えてみましょう:

Match match = new Regex("^bar").Match(some_string,3);

一致させたいのですがsome_string、最初からではなく、指定された位置から始めます。問題は、その位置、つまりアンカーから正確に一致させたいということです。

残念ながら、うまくいきません。MS regex は、文字列のチャンクを単独では文字列として処理しないため、 start positionではなく、文字列^の真の先頭のみに一致します。

簡単な回避策は、次のように記述することです。

Match match = new Regex("^bar").Match(some_string.Substring(3));

ダウンサイズ --速度(つまり、速度の欠如)。

だから私の質問はこれです-文字列の途中で固定された正規表現をすばやく一致させる方法は?

4

1 に答える 1

4

.NET には、エンジンが開始する位置 (通常は最後の一致の終わり、この場合はオフセット) 用の別のアンカーがあります: \G.

したがって、パターンを使用できるはずです@"\Gbar"

ソース (MSDN)

文字列内の特定の文字位置から開始するように一致を制限し、正規表現エンジンが文字列の残りの一致をスキャンしないようにするには、正規表現を\G(左に右から左へのパターン、または右から左へのパターンの場合は右)。これにより一致が制限されるため、正確に から開始する必要がありstartatます。

于 2012-12-22T21:57:04.720 に答える