fork(4) download
  1. <?php
  2.  
  3. $data = <<<DATA
  4. Here is some normal post content
  5.  
  6. [QUOTE]
  7. This is an appropriate quote
  8. [/QUOTE]
  9.  
  10. Here is more post content
  11.  
  12. [QUOTE]
  13. This is a a valid quote, as it's only 1 level deep.
  14.   [QUOTE="User 2"]
  15.   Here's an unnecessary nested quote.
  16.   [QUOTE]
  17.   Here's a 3nd level unnecessary nested quote.
  18.   [/QUOTE]
  19.   [/QUOTE]
  20. [/QUOTE]
  21.  
  22. Here is more post content
  23. DATA;
  24.  
  25. $regex = '~
  26. (\[QUOTE[^][]*\]
  27. (?:[^][]++|(?1))++
  28. \[/QUOTE\])
  29. ~x';
  30.  
  31. $data = preg_replace_callback($regex,
  32. function($match) use($regex) {
  33. return $match[0][0] . preg_replace($regex, '', substr($match[0], 1));
  34. },
  35. $data);
  36. echo $data;
  37. ?>
Success #stdin #stdout 0.02s 23776KB
stdin
Standard input is empty
stdout
Here is some normal post content

[QUOTE]
This is an appropriate quote
[/QUOTE]

Here is more post content

[QUOTE]
This is a a valid quote, as it's only 1 level deep.
   
[/QUOTE]

Here is more post content