2016-12-12 3 views
-2

私は現在、PHPの正規表現を使用して、より大きなテキストから特定の情報塊を取得しようとしています。私はJavascriptを使って同じことをすることに関して、数週間前に質問しました。 Javascriptの解決策はやや厄介なものでしたが、私はPHPを使ってそれを行うのを助ける必要があります。以下はPHPの正規表現の助けを借りてテキストの塊を回復する

Iからテキストのチャンクを取得したいと同様のテキストの一部である:...

===Substantiv=== 
Någonting kul som det innebär, 
uppenbarligen är det så 
alltså en definition på någonting 

==Slumpmässig== 
Detta är en slumpmässig text mitt i som stör. 

?¤% Jag stör ännu mer! 

===Adjektiv=== 
En bra definition som är grym. 
Men kanske bättre än så. 
Fast ändå inte, 
eller kanske faktiskt. 

&56Mer störande skit som poppar in slumpmässigt här. 

私は正規表現をされて使用して何とか取得したいテキストを

===Adjektiv=== 
En bra definition som är grym. 
Men kanske bättre än så. 
Fast ändå inte, 
eller kanske faktiskt. 

...残りの部分は削除したいと思います。

私は自分の文字列にうまく取り込めるようにするにはどうすればいいですか?

敬具、

編集:、私はそれを文字列に変換しなければならない入れて、テキストの特定のチャンクの前後に空行で私は後の午前チャンクを分割したいと思いれますこの場合、=== Adjektiv ===を含む正しいチャンクであることが分かります。

編集:私はすでに正規表現を知っています。私が直面している問題は、私が理解している限り、先読みをサポートしていないPHPと関係しています。

編集: {{SEアベン|ギフト}}

==Svenska== 
===Adjektiv=== 
{{sv-adj-t-okomp|mask=}} 
'''gift''' 
#{{avledning|gifta|perfpart}}; ''(om person)'' som ingått [[äktenskap]] 
#:''Vet du om han är '''gift'''?'' 
#:''Jo, Anders och Emma är '''gifta''' med varandra.'' 
#:{{besläktade ord|[[gifta#Verb|gifta]], [[gifte#Substantiv|gifte]]}} 
#:{{sammansättningar|[[bortgift]], [[ingift]], [[ogift]], [[omgift]]}} 
#:{{fraser|[[gift par]]}} 

====Översättningar==== 
{{ö-topp|som ingick äktenskap}} 
*bokmål: {{ö+|no|gift}} 
*bosniska: {{ö|bs|oženjen}} (för män), {{ö|bs|udata}} (för kvinnor) 
*danska: {{ö+|da|gift}} 
*engelska: {{ö+|en|married}} 
*franska: {{ö+|fr|marié}} 
*färöiska: {{ö|fo|giftur}} 
{{ö-mitt}} 
*isländska: {{ö+|is|giftur}} 
*italienska: {{ö+|it|sposato}} 
*litauiska: {{ö|lt|susituokęs}} 
*tyska: {{ö+|de|verheiratet}} 
{{ö-botten}} 
+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/130542/discussion-on-question-by-d-ataro-recovering-chunks-of-text-with-a-little-助けて)。 –

答えて

1
(^|\n\n)\K===Adjektiv===\n(.+(\n|$))+ 

この正規表現は、任意のルック先読みや尻せずにマッチします。あなたが\ Kを取り除くなら、それはjava-scriptで動作するはずですが、マッチする前に空白行を取得します。また、phpは先読みをサポートしています。 wiktorのコメントのように\ nの代わりに\ Rを使用することができます。

は、それが2つの空白行または(^|\n\n)を使用して文字列の先頭を照合することによって

この正規表現作品のしくみそれは、あなたは試合の開始を配置したい場所、これは実際にあると言って、\ Kを使用しています。その後、===Adjektiv===\nに一致します。これは、= ==Adjektiv===に改行を加えたものです。その後、少なくとも1文字以上の行と、その行の改行または改行が一致するように進めます。それは(.+(\n|$))+を使ってこれを服用します。少なくとも+ 1にマッチする+演算子で改行なしをマッチさせます。その後、改行または文字列の終わりにマッチします。それは、文字を含む行がなくなるまでこれを量ります。 1行を空にしたいが、2行でのマッチングを停止する場合は、これを(.+(\n{1,2}|$))+に置き換えます。また、()内のこの最後のセクションをワープすることで、第2のキャプチャグループを使用して見出しを除外することができます。

これは、ルックアヘッドやルックバックを使用しないため、効率的にも利点があります。

関連する問題