1

次の文字列があります。

$/Mycollection/Branches/Dev/New/php/MySite/src/MySite/somefolder/src/sad.php

正規表現パターンを作成し、「src」が最初に現れる前にすべてを取得する必要があります。

私はそのように使用しようとしました.+(src)が、貪欲を減らす必要があることを理解したので、誰か助けてもらえますか?

4

3 に答える 3

3

この正規表現を使用できます:(.*?)src最初にキャプチャされたグループのみを使用します。

于 2012-03-12T20:21:59.133 に答える
1

あなたは近くにいます。あなたはこれを行うことができます...

(^.+?)src

次に、キャプチャされた最初のグループの値を取得します。


これを別の方法で行うこともできます...

src.+

次に、一致を に置き換え""ます。

たとえば (C# の場合) ...

string value = Regex.Replace(yourstring, "src.+", "");

実際には、この方法を使用する方がはるかに効率的です。最初の方法 (少なくとも .NET では) では、1 秒あたり約 150,000 回の反復に対して、1 秒あたり約 100 万回の反復が行われます。これは、キャプチャ グループを使用するとオーバーヘッドが発生することと、遅延?量指定子で発生するバックトラッキングが原因の 1 つです。

ところで、私はRegex Heroでテストとベンチマークを行いました。その後、ここに遅延量指定子をカバーする優れた記事があります?

于 2012-03-12T20:15:13.827 に答える
0

一部の最新の正規表現の実装で.+?は、ケチです。貪欲な量指定子の後に疑問符を追加して、それをけちに変更します。

于 2012-03-12T20:10:58.200 に答える