1

私は持っています...

"Data Source=MYSERVER.dghdev.ds;Initial Catalog=CarPath;Persist Security Info=True;User ID=sa;Password=Password1"

そして正規表現を書きました...

(?=Data Source).*;

しかし、それは「sa」までのすべてに一致します。これは本当に迷惑です私はこれがなぜ起こるのか理解していません。。*は任意の数の文字を示し、次に「;」を示します。最初のもので停止する必要があります。4つ目で止まりません。どうしてこれなの?そして、どうすれば修正できますか?

4

1 に答える 1

3

*量指定子は貪欲で、次のトークンに一致できずバックトラックする必要があるまで、できるだけ多くの文字に一致します。この場合、は文字列.*の最後まですべてに一致し;ます。

最初の で止めたい場合;は、量指定子の遅延バージョンが必要です: *?。つまり、正規表現は(?=Data Source).*?;. 遅延量指定子は、次のトークンが一致する限り、できるだけ少ない文字と一致しようとします。

言語のサポートに応じて、,, などの量指定子の動作は、*通常、,,直後に追加することで遅延させることができます。+{n,m}?*?+?{n,m}?

于 2012-07-19T09:40:18.460 に答える