2013-09-22 1 views
2

Я хочу, чтобы убрать все BBCode из строки, кроме [quote] BBCode.Стриптиз всех BBCode из строки, кроме [quote]

У меня есть следующие модели, которые могли бы быть возможно для цитат:

[quote="User"] 
[quote=User] 
[quote] 
Text 
[/quote] 
[/quote] 
[/quote] 

Это то, что я в настоящее время используют, чтобы лишить BBCode, который работает:

$pattern = '|[[\/\!]*?[^\[\]]*?]|si'; 
$replace = ''; 
$quote = preg_replace($pattern, $replace, $tag->content); 
+0

Используйте [расширение BBCode для PHP] (http://php.net/bbcode). – Gumbo

ответ

2

Довольно много некоторых решений

<?php 
    function show($s) { 
    static $i = 0; 
    echo "<pre>************** Option $i ******************* \n" . $s . "</pre>"; 
    $i++; 
    } 

    $string = 'A [b]famous group[/b] once sang: 
    [quote]Hey you,[/quote] 
    [quote mlqksmkmd]No you don\'t have to go[/quote] 

    See [url 
    http://www.dailymotion.com/video/x9e7ez_pony-pony-run-run-hey-you-official_music]this video[/url] for more.'; 

    // Option 0 
    show($string); 

    // Option 1: This will strip all BBcode without ungreedy mode 
    show(preg_replace('#\[[^]]*\]#', '', $string)); 

    // Option 2: This will strip all BBcode with ungreedy mode (Notice the #U at the end of the regex) 
    show(preg_replace('#\[.*\]#U', '', $string)); 

    // Option 3: This will replace all BBcode except [quote] without Ungreedy mode 
    show(preg_replace('#\[((?!quote)[^]])*\]#', '', $string)); 

    // Option 4: This will replace all BBcode except [quote] with Ungreedy mode 
    show(preg_replace('#\[((?!quote).)*\]#U', '', $string)); 

    // Option 5: This will replace all BBcode except [quote] with Ungreedy mode and mutiple lines wrapping 
    show(preg_replace('#\[((?!quote).)*\]#sU', '', $string)); 
?> 

На самом деле, это просто выбор между вариантами 3 и 5, я думаю.

  • [^]] выбирает каждый символ, который не является ]. Это позволяет «эмулировать» неровный режим.
  • U вариант регулярное выражение позволяет использовать .* вместо [^]]*
  • s вариант регулярное выражение позволяет соответствовать по нескольким линиям
  • (?!quote) позволяет нам сказать что-нибудь, что не соответствует «цитаты» в следующем отборе. Используется следующим образом: ((?!quote).)*. См. Regular expression to match a line that doesn't contain a word? для получения дополнительной информации.

This fiddle - живая демонстрация.

 Смежные вопросы

  • Нет связанных вопросов^_^