2013-06-07 6 views
3

Я пытаюсь удалить некоторые html из моей строки текста, которая поступает из созданной Wordpress базы данных.Regular Expression remove [caption]

Я хочу это:

Marnie Stanton led us through the process first and then everyone went crazy. 
[caption id="attachment_76" align="alignnone" width="191"] One of the work stations[/caption] 
[caption id="attachment_78" align="alignnone" width="300"] The group is getting some great results[/caption] 
[caption id="attachment_83" align="alignnone" width="224"] You can see the prints multiplying[/caption] 

превратиться в это:

Marnie Stanton led us through the process first and then everyone went crazy. 

Так что я хочу, это все от первого [caption] до последнего [/caption] быть удалены.

Я начал с этим:

(\[caption\s+?[^]]+\]) 

Который только удаляет первый тег.

+0

Как насчет 'Энн удивляет сама ...' текст, который должен быть в результате? – jeroen

+0

На самом деле этого не должно быть, но это просто проблема с тем, как это было добавлено в блог Wordpress, поэтому для всех целей написания регулярного выражения он все равно должен быть там. –

+0

Я удалил его из вопроса, так что больше нет путаницы. –

ответ

6

Вы можете использовать что-то вроде этого

$string = 'Marnie Stanton led us through the process first and then everyone went crazy. 
[caption id="attachment_76" align="alignnone" width="191"] One of the work stations[/caption] 
[caption id="attachment_78" align="alignnone" width="300"] The group is getting some great results[/caption] 
I want to keep this ! 
[caption id="attachment_83" align="alignnone" width="224"] You can see the prints multiplying[/caption]'; 

$new_string = preg_replace('#\s*\[caption[^]]*\].*?\[/caption\]\s*#is', '', $string); 
echo $new_string; 

Выход:

Марни Стэнтон сначала провела нас через процесс, а потом все сошли с ума. Я хочу сохранить это!

Объяснение:

  • Модификаторы is: i означает совпадения без учета регистра, s средства соответствуют новые линии с точками .
  • \s*: сопрягать белые пространства 0 или более раз
  • \[caption: матч [caption
  • [^]]*: соответствуют ничего, кроме ] 0 или более раз
  • \]: матч ]
  • .*?\[/caption\]: соответствуют ничего до [/caption] нашел (и матч [/caption])
  • \s*: сопрягать белые пространства 0 или более раз

Online demo

1

Как кажется, вы просто хотите начало строки, я не хотел бы использовать регулярное выражение, но строковые функции:

$pos = stripos($your_string, '[caption'); 
$result = substr($your_string, 0, $pos); 
+0

Это было бы одним из решений этого конкретного случая, однако проблема заключается в том, что это сайт Wordpress, который администратор может выбрать для размещения текста текста, который должен отображаться в конце заголовков, а не в начале. Я просто хочу удалить титры там, где они есть. –

+0

@ DylanCross Вот почему я спросил о тексте, который был первоначально между заголовками ... – jeroen

+0

О, извините, мой комментарий, должно быть, был неправильно понят. Но это была моя ошибка. –

0

Кажется, что вы можете взорвать строку символами новой строки, Н.Д. просто взять первую строку ...

<?php 

$str = <<<EOD 
Marnie Stanton led us through the process first and then everyone went crazy. 
[caption id="attachment_76" align="alignnone" width="191"] One of the work stations[/caption] 
[caption id="attachment_78" align="alignnone" width="300"] The group is getting some great results[/caption] 
[caption id="attachment_83" align="alignnone" width="224"] You can see the prints multiplying[/caption] 
EOD; 

$lines = explode("\n", trim($str)); 

echo $lines[0]; # Marnie Stanton led us through the process first and then everyone went crazy. 
0

[подпись] является примером shortcode. Вы можете удалить все короткие коды с помощью функции Wordpress 'strip_shortcodes();.

$text = 'Marnie Stanton led us through the process first and then everyone went crazy. 
[caption id="attachment_76" align="alignnone" width="191"] One of the work stations[/caption] 
[caption id="attachment_78" align="alignnone" width="300"] The group is getting some great results[/caption] 
I want to keep this ! 
[caption id="attachment_83" align="alignnone" width="224"] You can see the prints multiplying[/caption]'; 

$text = strip_shortcodes($text); 
echo $text; 

Это Выведет:

Марни Стэнтон привел нас через процесс, а затем все пошли crazy.I хотят, чтобы это!


[caption] documentation

strip_shortcodes documentation