2016-04-18 18 views
0

特定のタグとその間のテキストを削除する必要があります。タグの場合はstr_replaceを使用できますが、テキスト間にはpreg_replaceを使用してみますが、何も動作しません。PHP - 特定のタグの前後の内容を削除する

コードを修正するには:

// ... 
[tabs_item title=”My title”] some different text here... [/tabs_item] 
[tabs_item title=”My Other title”] some different text here... [/tabs_item] 
// ... 

私のコード:

$pattern = "/[tabs_item[^>]*title=\"my txt\"](.*?)[\\/tabs_item]/si"; 
$replacement = ''; 
$fix1 = preg_replace($pattern, $replacement, $content2); 

$search = array('[/tabs_item]'); 
$replace = array(''); 
$fix2 = str_replace($search, $replace, $fix1); 

return $fix2; 
+0

あなたは「'あなたの "コード" 修正するために'があります。これらはhtml(ish)テキストの有効な引用符ではありません。あなたのものをワードプロセッサで走らせてはいけません。明日はないようにコードをマングルするでしょう。適切なテキスト/コードエディタを使用してください。 –

+0

あなたのパターンに '[^>] *'を使用する理由は? –

+0

期待される出力は?それは「ここでは別のテキストですか?」ですか? – Andreas

答えて

0

フルコードをご送信いただきありがとうございます。あなたのコンテンツにはHTMLがあるので、これは少し違って処理する必要があります。

まず、コンテンツに/ charが含まれているため、正規表現の区切り記号を変更して干渉しないようにする必要があります。私はそれを%に変更しました。次に、複数行の文字列を使用しているため、改行文字を。(ドット:すべての文字)に含めるように正規表現に修飾語を設定する必要があります。この修飾子は、閉じた区切り文字の後にパターンの最後に 's'を追加することで追加されます。

このコードはテストされ、私のために働いています。

$content = ' 
    <p>[tabs] [tabs_item title="Description"]<br /> 
    Lorem ipsum dolor sit amet</p> 
    <p>Lorem ipsum dolor sit amet<br /> 
    Lorem ipsum dolor sit amet<br /> 
    Lorem ipsum dolor sit amet</p> 
    <p>[/tabs_item] [tabs_item title="Zwroty"]</p> 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec mauris nunc. Vestibulum elit urna, aliquet et urna et, sagittis blandit ligula.</p> 
    [/tabs_item] 
    <p>[tabs_item title="Peyment and shipping"]</p> 
    <p>Lorem ipsum dolor sit amet</p> 
    <p><b>Lorem ipsum dolor sit amet</b>Lorem ipsum dolor sit amet</p> 
    <p>Lorem ipsum dolor sit amet</p> 
    <p>Lorem ipsum dolor sit amet</p> 
    <p>Lorem ipsum dolor sit amet</p> 
    <p>Lorem ipsum dolor sit amet " <a href="#" target="_blank">url</a>"</p> 
    <p>[/tabs_item]</p> 
    <p>[/tabs]</p>'; 

$pattern = "%\[tabs_item[^\[]+\[/tabs_item\]%s"; 
$replacement = ''; 
$out = preg_replace($pattern, $replacement, $content); 

echo $out; 

結果で:

<p>[tabs] 
    <p></p> 
    <p>[/tabs]</p> 

は、あなたのフォローアップの質問に答えるために:

[tabs_itemタイトル= "Peymentと配送"] ... [:あなただけの、このタグを削除したい場合

$pattern = '%\[tabs_item title="Peyment and shipping"\][^\[]+\[/tabs_item\]%s'; 
:あなたがあなたのパターンを変更することができます

/tabs_item]その結果

<p>[tabs] [tabs_item title="Description"]<br /> 
    Lorem ipsum dolor sit amet</p> 
    <p>Lorem ipsum dolor sit amet<br /> 
    Lorem ipsum dolor sit amet<br /> 
    Lorem ipsum dolor sit amet</p> 
    <p>[/tabs_item] [tabs_item title="Zwroty"]</p> 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce nec mauris nunc. Vestibulum elit urna, aliquet et urna et, sagittis blandit ligula.</p> 
    [/tabs_item] 
    <p></p> 
    <p>[/tabs]</p> 
+0

私はエラーがあります:警告:preg_replace():デリミタは英数字またはバックスラッシュではいけません – AQ404

+0

デリミタを追加するのを忘れました。私は自分の答えを更新しました。希望が役立ちます。 –

+0

今回はエラーはありませんが、効果はありません。/私はフルコードを投稿しました – AQ404

0

あなたがいないあなたが、これはこのような機能を爆発して作ることができる正規表現のスキルを持っている場合。

<?php 

$var = '// something 
[tabs_item title=”My title”] some different text here... [/tabs_item] 
[tabs_item title=”My Other title”] some different text here... [/tabs_item] 
// something'; 

$first = explode('[tabs_item title=”My title”]',$var); 
$start = $first[0]; 
$last = explode('[/tabs_item]',$first[1]); 
$end = $last[count($last)-1]; 
echo $start.$end; 

?> 
+0

私はそれを試しました - しかしそれは正常に動作しません、[tabs_item title = "My title"]と[/ tabs_item]のあとに/ – AQ404

+0

@ AQ404の前に両方の内容をすべて削除します?実際には、コードはあなたの質問にあなたが必要とするもののように動作します。 – merdincz

+0

あなたの提案で私の完全なPHPコード(PHP +ワードプレス) ' 'does not work – AQ404

関連する問題