2017-10-16 6 views
0

私の要件は私の非常に基本的な正規表現の知識を大きく超えています。私は何も試すことができませんでした。あなたは$パターンのために私を助けてもらえますか?私が必要と何すべてのプレーンテキスト部分を囲むのに正規表現パターンが必要<p>と</p>タグ

は次のとおりです。テキスト部分(下の部分1S)<p> & </p>タグ

私の文字列の&性質があり、現在の状態で囲む必要があります。

  • マイstringはユーザー入力です。
  • 各改行(\ n)は<br>タグに変換されます。 2以上<br>タグ は<br><br>に置き換えられます。

文字列は3つの部分を持つことができます。 以下の部品の順序は任意で、任意の数にすることができます。

part 1   part 2  part 3 
|------------| |-------------| |--------| 
| plain text | | <ul>..</ul> | | $$..$$ | 
|------------| |-------------| |--------| 
  • 開始時に、文字列の最後にはありません<br>タグ。 (。<br>マスクで をトリミング)
  • パート2(<ul> ... </ul>部分)が自身の 前と後<br>タグを持っていません。決してない。
  • パート3($$ .. $$パート)は、 の前後に<br>タグを持っていません。決してない。
  • プレーンテキスト部分の間に正確に2個の<br>タグがあります。 (SO <br><br>のみプレーンテキスト部分との間に存在することができる。)
  • プレーンテキストの一部が、またはこれらのインライン スタイリングを有していてもいなくてもよい。<b></b><i></i>$..$を。

だから私は私が論理的に必要とする[0]パート2またはパート3と一致させることができていない$マッチした文字列にマッチだと思います。言い換えれば、$ matches [0]はパート2またはパート3を持つことはできません。

ありがとうございます。

無関係な注:$$と$使用はmathjaxのために存在します。

+3

「文字列に正規表現を適用する」:あなたは<p></p>タグが、この場合に、つかんするかどうか。正規表現は、文字列を含むあらゆる問題であなたが揺らす魔法の杖ではありません。 –

+0

サンプル入力、これまでに試したこと、望む結果が何であるべきか、それまでに得られた結果とはどのように異なるのか?また、インライン・スタイリングがある場合は、パート1を「プレーン・テキスト」と呼び出すことはできません。 – apokryfos

+0

[HTML/XMLをどのように解析して処理するのですか?](https://stackoverflow.com/)の重複が考えられます。質問/ 3577641/how-do-you-parse-and-process-html-xml-in-php) – Calimero

答えて

0

簡単な答えは次のとおりです。

preg_match('/<p>(.*?)<\/p>/', $oldString, $m); 
$newString=$m[1]; 

$メートルの意味を理解するために[]マニュアルを参照してください: http://php.net/manual/en/function.preg-match.php

ポイントは、私はyou'rが解決しようとは思わないということですあなたの問題は、ユーザー入力や書式設定されたソースから提供されるテキストを「浄化する」と思うはずです。 まず最初に、「プレーンテキスト」という表現の意味の欠如(実際には何を意味するのでしょうか?)を一般化すると、入力内の不要なコードのすべての可能性のあるケースを予測することは事実上不可能です...それらの多くは潜在的に非常に危険です。

i「がpurifing」形式のテキスト(提供またはないユーザー入力による)良い出発点は、この非常によくやった、とhiglyパーソナライズ図書館での問題に直面した場合: http://htmlpurifier.org/

すると、私は理解していませんでした何をする探していることがちょうど以上です

$newString=$m[0]; 
関連する問題