0

重複の可能性:
PHP 用の堅牢で成熟した HTML パーサー

文字列の最初の文と最初の画像 html インスタンスを取得しようとしています。

$description = preg_split('/<img/', $item->description,null,PREG_SPLIT_DELIM_CAPTURE);

配列を返すことはできますが、<img必要な値から を削除しています。フラグを使用してみましたが、探している戻り値を取得できず、区切り文字自体を含める必要があります。ピリオドまたはピリオドで分割できるはずの最初の文を取得することを知っています&nbsp;

弦:

<p>First sentence here comes.&nbsp; Second sentence here it is.&nbsp; One more sentence.&nbsp;&nbsp;</p> <img alt="amj" src="https://domain.com/images7.jpg" /> <img alt="Ea" src="http://domain.com/images3.jpg" /> <img alt="amj" src="https://domain.com/images7.jpg" /> <img alt="amj" src="https://domain.com/images7.jpg" />
4

3 に答える 3

0

1)最初の文

echo substr($item->description, 0, strpos('.', $item->description));

2)img

preg_match('#<img[^>]*>#',$item->description , $img);
echo $img[0];
于 2012-11-15T21:44:33.067 に答える
0

最初の文を取得するのはとても簡単です。以下に示すように、strposとを組み合わせて使用​​する必要があります。substr最初の画像タグを取得することに関しては、preg_match式を使用してそれを行うことができます。

$first_sentence = substr($item->description, 0, strpos($item->description, ))
于 2012-11-15T21:39:27.273 に答える
0

を利用する場合は、 でPREG_SPLIT_DELIM_CAPTURE使用される正規表現パターン内でキャプチャを提供する必要がありますpreg_split

あなたの現在のパターンでは:

/<img/

キャプチャするものがあります。そのため、削除されていることがわかります ( Demo ):

Array
(
    [0] => <p>First sentence here comes.&nbsp; Second sentence here it is.&nbsp; One more sentence.&nbsp;&nbsp;</p> 
    [1] =>  alt="amj" src="https://domain.com/images7.jpg" /> 
    [2] =>  alt="Ea" src="http://domain.com/images3.jpg" /> 
    [3] =>  alt="amj" src="https://domain.com/images7.jpg" /> 
    [4] =>  alt="amj" src="https://domain.com/images7.jpg" />
)

ただし、そこからキャプチャを作成すると、次のようにキャプチャされます。

/(<img)/

結果 (デモ):

Array
(
    [0] => <p>First sentence here comes.&nbsp; Second sentence here it is.&nbsp; One more sentence.&nbsp;&nbsp;</p> 
    [1] => <img
    [2] =>  alt="amj" src="https://domain.com/images7.jpg" /> 
    [3] => <img
    [4] =>  alt="Ea" src="http://domain.com/images3.jpg" /> 
    [5] => <img
    [6] =>  alt="amj" src="https://domain.com/images7.jpg" /> 
    [7] => <img
    [8] =>  alt="amj" src="https://domain.com/images7.jpg" />
)

ご覧のとおり、preg_splitそれは文書化されたジョブであり、最初のキャプチャー supgroup の各キャプチャーごとに別の分割を追加します (最初のもののみが取得されます)。次に、たとえば、他の html-like-string-regex のさまざまな質問で概説されている完全なタグ全体に拡張する必要がある場合があります (正規表現では通常どおり制限されるため、HTML の代わりに preg_* 関数を使用すると非難されます)。パターン自体ではなく、問題が発生した場合のパーサー:

/(<img [^>]*>)/

結果 (デモ):

Array
(
    [0] => <p>First sentence here comes.&nbsp; Second sentence here it is.&nbsp; One more sentence.&nbsp;&nbsp;</p> 
    [1] => <img alt="amj" src="https://domain.com/images7.jpg" />
    [2] =>  
    [3] => <img alt="Ea" src="http://domain.com/images3.jpg" />
    [4] =>  
    [5] => <img alt="amj" src="https://domain.com/images7.jpg" />
    [6] =>  
    [7] => <img alt="amj" src="https://domain.com/images7.jpg" />
    [8] => 
)

標準の HTML パーサーを使用すると、コードをより安定させることができます。

于 2012-11-16T08:42:38.783 に答える