2011-09-09 14 views
14

私はこのテキストを持っていると私は正規表現がどのように二つの文字列

begin 
text 
end 

begin 
text 
end 

begin 
text 
end 

始まりと終わりの間のテキストをキャプチャしたいとの間でテキストを検索します。

/begin.*end/ 

これは、最初の開始と最後の終了を取得します。

答えて

12

それは怠惰ください - /begin.*?end/

追記:「怠惰」に劣らず許容可能な「非貪欲」よりもされません。 Exampleexampleexample

+7

用語は、 "非欲張り"( "怠け者" ではありません) – Bohemian

4

テキストは、行が(\nまたは\r)フィードあなたが正規表現に「DOTALL」フラグを追加し、だけでなく、あなたの試合消極的(すなわち「非欲張り」を作る必要がありますが含まれている場合)

あなたの正規表現の味に応じて:

/begin.*?end/s 
(?s)begin.*?end 
+0

jsのバージョン。 '/ begin。*?end/s' [regex101では動作しません](https://regex101.com/r/HzsPk7/1)[python version](https://regex101.com/r/zsq4IQ)/1)があります。私はwhit scaped '\ s'を試みましたが、マッチしませんでした。 – Mikel

+0

@もちろん、 '/ begin。*?end/s'は、正規表現の一部ではないので、正規表現101では動作しません。それらはjsのデリミタですが、人々はjs関連正規表現の答えにそれらを含めることがよくあります(つまり、引用符ではなくスラッシュ、正規表現の後ろにスラッシュで区切られたフラグ)。 ''(?s)begin *?end "'(人々も時々そうする)のように、答えに引用符で囲まれた非jsバージョンをコーディングするのと同じです。 – Bohemian

+0

私は['begin [\ s \ S] *?end'](https://regex101.com/r/5wLcgR/2)でこれを行うことができました。 – Mikel