次の文字列があります。
$/Mycollection/Branches/Dev/New/php/MySite/src/MySite/somefolder/src/sad.php
正規表現パターンを作成し、「src」が最初に現れる前にすべてを取得する必要があります。
私はそのように使用しようとしました.+(src)
が、貪欲を減らす必要があることを理解したので、誰か助けてもらえますか?
この正規表現を使用できます:(.*?)src
最初にキャプチャされたグループのみを使用します。
あなたは近くにいます。あなたはこれを行うことができます...
(^.+?)src
次に、キャプチャされた最初のグループの値を取得します。
これを別の方法で行うこともできます...
src.+
次に、一致を に置き換え""
ます。
たとえば (C# の場合) ...
string value = Regex.Replace(yourstring, "src.+", "");
実際には、この方法を使用する方がはるかに効率的です。最初の方法 (少なくとも .NET では) では、1 秒あたり約 150,000 回の反復に対して、1 秒あたり約 100 万回の反復が行われます。これは、キャプチャ グループを使用するとオーバーヘッドが発生することと、遅延?
量指定子で発生するバックトラッキングが原因の 1 つです。
ところで、私はRegex Heroでテストとベンチマークを行いました。その後、ここに遅延量指定子をカバーする優れた記事があります?
。
一部の最新の正規表現の実装で.+?
は、ケチです。貪欲な量指定子の後に疑問符を追加して、それをけちに変更します。