一部のRSSフィードWebサイトから説明を取得しています。これらの説明の一部には、削除したい画像や特定のテキストが含まれています。
フィードを取得するコード:
$rss = simplexml_load_file($website);
foreach ($rss->channel->item as $item) {
$description = (string)$item->descritpion;
}
これらは私が得るさまざまな形式です:
<description><![CDATA[
<p> //Post Description </p>
<p>The post <a rel="nofollow" href="">
//Post Title.</a> appeared first on
<a rel="nofollow" href="">//Feed Website.</a>.
</p>
]]></description>
_________________________________________________________________
<description><![CDATA[
<div>
<strong>//Some Text.</strong>
</div>
<div>
</div>
<div>//Some Text.</div>
<div>
<img alt="" src="" style="width: 640px; height: 427px;" />
</div>
]]></description>
_______________________________________________________________
<description>
<img style="margin:0 1em 1em 0;" align="left" src=""/>
„//Some Text.
</description>
画像を削除するには:
$description = (string)strip_tags($item->description);
テキストは「投稿(投稿タイトル)が最初に表示された(ウェブサイト)」です。
私が使用するテキストを削除するには:
if (strpos($description, 'appeared first')) {
$siteNames = array('a.com', 'b.com', 'c.com');
foreach ($siteNames as $siteName) {
if(strpos($description, $siteName)){
$appeared = 'The post '.$item->title.' appeared first on '.$siteName;
$description = str_replace($appeared, '', $description);
}
}
}
たとえば、説明に以下が含まれている場合:
<p>The post
<a rel="nofollow" href="http://a.com/what-is-php">What is PHP.</a>
appeared first on
<a rel="nofollow" href="http://a.com">a.com.</a>.
</p>
次に、そのテキストを削除する必要があります。
次に、
strip_tags($item->description)
を使用します
、画像は表示されません。
しかし、コードを使用して文字列を削除すると、すべての説明で機能せず、一部の文字列がまだ残っています。
更新:
<description><![CDATA[
<p>Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2
</p>
<p>The post <a rel="nofollow" href="https://a.com/post-title/">Laugardalsá – forfallaholl á besta tíma</a> appeared first on <a rel="nofollow" href="https://a.com">a.com</a>.</p>
]]></description>
回答 1 件
関連した質問
- 正規表現で正しくフィルタリングする方法
- PHP:JSONエンコード出力には、複数ではなく1つのXMLエントリのみが含まれます
- ネガティブルックアラウンドで定義されたルートは、ネガティブアサーションにもかかわらずルートと一致します
- PHP-内部コンテンツを含む完全なDivクラスを取得するための再帰正規表現
- PHPで正規表現が機能しないのはなぜですか?
- 特別な条件でのみ文字列から数字を削除する正規表現ガイド
- PHP:pregは最後の行を除くすべての文を分割します
- @言及のユーザー名のスペースとリンクの小文字
- PHPでコンテンツの一部を文字列に保持しながら、角かっこを置き換えるにはどうすればよいですか?
- PHPを使用してFTPサーバーからロードされたXMLに新しいノードを保存する方法
コード:(デモ)
出力:
私はこれがあなたが必要とする方法であなたのデータを大部分処理することを期待しています。最初の正規表現パターンは間違いなく最も毛深いものです(パターンの説明についてはリンクを参照してください)。
[abc]\.com
を調整する必要があります ニーズに合わせて-潜在的に(?:test\.com|example\.net|sample\.co\.uk)
のようなことをする 。 「適切」になるまで、入力データの一部をregex101に入力し、機能するまでパターンを微調整し続けます。2番目と3番目のパターンは、テキストラッパーを削除するためのものです。
strip_tags()
のため、2番目は本当に必要ありませんが その部分文字列を削除します。strip_tags()
ぶら下がり]]>
を残します 。最初のパターンは大文字と小文字を区別しません(
i
)およびユニコード耐性(u
)最良の結果を得るために。^
および$
文字列の区切り文字の始まりと終わりです。実際のデータに適していない場合は、削除できます。これらの手順は、不要な残留部分文字列を「モップアップ」するだけです。ザ・trim()
callは確かに、保存されたデータをできる限りクリーンにするために含めるものです。特定の
<p>
削除するタグ付きサブストリングは、保持する2つのサブストリングの間にネストされています。複数の\s{2,}
を圧縮するために別のパターンを追加することができます 単一のスペースにするか、\s*
と書くかもしれません 末尾の空白をキャプチャする最初のパターンの最後に。これを知っているのはあなただけです。