0

<img>タグ付きのテキストがいくつかありますが、それは分割する必要があるということです。それはフォーマットです

<img.../> Text text text <img.../>text text text<img.../> text text text

正規表現を使用してpreg_match_allいるので、

Array
(
    [0] => Array
        (
            [0] => <img ... />
            [1] => <img ... />
            [2] => <img ... />
            [3] => <img ... />
        )

でももらえたら本当にいいです

Array
(
    [0] => Array
        (
            [0] => <img ... />
            [1] => text text text 
            [2] => <img ... />
            [3] => text text text 
            [4] => <img ... />
            [5] => text text text 
        )

私はいくつかのことを試しましたが、PCREについてよく理解していません。preg_splitそれぞれの画像タグが違うので避けられれば使いたくないです。

(一般的なHTMLパーサーは正規表現で記述できないことを理解していますが、この場合、作業している入力データが説明した形式であるため、これは機能すると思います。ネストされることはありません。心配する必要のある画像タグ。)

PS/!<img.+>/、、、/!(<img.+>)/および不一致を取得しようとしまし/(!(<img.+>))/たが、空の配列が返されます。何が間違っているのかを知るために正規表現をデバッグする良い方法がわかりません。

4

2 に答える 2

1

あなたの問題(またはその問題の実際のコード)が何であるかはわかりませんが、:

$r = preg_split('#<img[^>]+>#', $source, 0, PREG_SPLIT_DELIM_CAPTURE);

結果:

Array
(
    [0] => <img.../>
    [1] =>  Text text text 
    [2] => <img.../>
    [3] => text text text
    [4] => <img.../>
    [5] =>  text text text
)

もちろん、適切な正規表現の代わりに、固定文字列(おそらく)を使い続けることができます#<img1>|<img2>|<img3>#

于 2012-11-20T23:40:29.770 に答える
0

これを行うことにより、必要な情報を適切な形式ではないものにすることができます。

preg_match_all('~(<img[^>]*>)([^<]+)~', $str, $matches);

//if inside your "text text text" areas you have other html tags, use this:
preg_match_all('~(<img[^>]*>)(.+?)(?=<img|$)~', $str, $matches);

この時点で、$matches[0]一致した文字列全体が含まれます。$matches[1]最初の括弧のセットからの$matches[2]すべての一致が含まれ、2番目の括弧のセットからのすべての一致が含まれます。

Array ( 
  [0] => Array ( 
    [0] => <img.../> Text text text 
    [1] => <img.../>text text text 
    [2] => <img.../> text text text 
  )
  [1] => Array ( 
    [0] => <img.../> 
    [1] => <img.../> 
    [2] => <img.../> 
  ) 
  [2] => Array ( 
    [0] =>  Text text text 
    [1] => text text text 
    [2] =>  text text text 
  ) 
) 

本当に必要な場合は、次のコード行を追加するだけです。

$answer = array();
foreach($matches[0] as $i=>$match){
  $answer[] = $matches[1][$i];
  $answer[] = $matches[2][$i];
};

$answer今は次のようになります:

Array ( 
  [0] => <img ... />
  [1] =>  Text text text 
  [2] => <img ... />
  [3] => text text text 
  [4] => <img ... />
  [5] =>  text text text 
)
于 2012-11-20T23:47:50.343 に答える