2016-06-27 17 views
0

テキストファイルには "データベース"のように多くのテキストがあり、文字列から始まり別のもので終わる特定の部分を抽出する必要があります。

具体的には、「データベース」のいくつかは、次のようになります。PHPは文字列と別の文字の間にテキストを取得します

i:24;s:5:"sName";s:12:"adsfasdffdfd";s:7:"iStatus";i:1;s:9:"iPosition";i:0;s:17:"sDescriptionShort";s:29:"<p>test short description</p>";s:16:"sDescriptionFull";s:28:"<p>test full description</p>"; 

そして私は数はパラメータで、パラメータとして<p>となる</p>の間の部分を抽出するために、最初のi:24必要があります。
私はregexpを使ってみましたが、今までは成功しませんでした。
コード自体を要求するのは良い方法ではありませんが、今回は本当に固まってしまいました。何か案は?
P.S.このファイルには次々とこのような文字列が含まれています。だから私はi:$a$aの番号を見つけ、出会った最初の段落から内容を返すために正規表現が必要です。

だから私は返されることを期待するものである:<p>test short description</p> これはあなたがリテラルi:24の後に来るテキストを探しているi:24

+1

これは無効なシリアル化された文字列のようです。 – Rizier123

+0

私は知っているが、CMSはこのようなコンテンツ全体を置く... :( –

+1

これはCMSに何か問題があるはずです。これはシリアル化された文字列でなければならないようです。不要な正規表現を持つ新しいもの。 – Rizier123

答えて

1

後に発生する最初の段落でなければなりません考えると?これらのどれもが、特殊文字ではないので、

i:24 

...のは、そのリテラルのシーケンスで私たちのパターンの建設を始めましょう次またはi:24と開口部<p>タグの間に消費する以上の文字があってもなくてもよいです。それではすることによって、私たちの数量詞を変更してみましょう私たちは、正規表現エンジンの食欲を飼いならすしたい

i:24.* 

...のは、これらの文字は何もすることができますと仮定しましょう、私たちは *が私たちを与え、 {,INF}数量詞でワイルドカードメタ文字を使用しますそれは非貪欲です。

i:24.*? 

次我々は

i:24.*?(<p>) 

... <p>、開口部に合わせ、キャプチャしたい...と我々は仮定します<p>タグ、の内のコンテンツは何も(読むことができますワイルドカード)と多分何もない、{,INF}、または*

i:24.*?(<p>.*) 

それはあまりにも多くの<p>タグを消費しないように、私たちの*数量詞の食欲を飼いならすことを忘れないでください。

i:24.*?(<p>.*?) 

そして、それは特殊文字なので、最後に我々は、エスケープスラッシュで、終了</p>タグを消費してキャプチャすることにより、それを閉鎖します。

i:24.*?(<p>.*?<\/p>) 

これは、あなたが達成しようとしているものに適しています。

+0

ありがとう!あなたの説明は非常にきれいで理解しやすいです。素晴らしいコンテンツ:) –

関連する問題