fork(2) download
  1. <?php
  2. $str = <<<TAB
  3. going to
  4. write some
  5. [table]
  6.   [thead]
  7.   [td]test[/td]
  8.   [td]test[/td]
  9.   [td]moo[/td]
  10.   [td]a[/td]
  11.   [/thead]
  12.   [tr]
  13.   [td]test[/td]
  14.   [td]moo[/td]
  15.   [/tr]
  16.   [tr]
  17.   [td]test[/td]
  18.   [td]test[/td]
  19.   [td]moo[/td]
  20.   [td]a[/td]
  21.   [/tr]
  22. [/table]
  23. text
  24. here
  25. TAB;
  26.  
  27. function markupDoc($post){
  28. //tables
  29. while(($post2 = preg_replace("/\[td]((?:(?!\[td\]).)+?)\[\/td\]/s", '<td>\\1</td>', $post)) !== $post){
  30. $post=$post2;
  31. }
  32. while(($post2 = preg_replace("/\[tr]((?:(?!\[tr\]).)+?)\[\/tr\]/s", "<tr>\\1</tr>", $post)) !== $post){
  33. $post=$post2;
  34. }
  35. while(($post2 = preg_replace("/\[thead]((?:(?!\[thead\]).)+?)\[\/thead\]/s", '<thead>\\1</thead>', $post)) !== $post){
  36. $post=$post2;
  37. }
  38. while(($post2 = preg_replace("/\[table]((?:(?!\[table\]).)+?)\[\/table\]/s", '<table class="table table-striped table-bordered">\\1</table>', $post)) !== $post){
  39. $post=$post2;
  40. }
  41. return $post;
  42. }
  43.  
  44. function parsePost($post)
  45. {
  46. $table_start = mb_strpos($post, '[table]');
  47. $table_end = mb_strpos($post, '[/table]', $table_start);
  48. $table_end += mb_strlen('[/table]');
  49.  
  50. $output = nl2br(mb_substr($post, 0, $table_start));
  51. $output .= markupDoc(mb_substr($post, $table_start, $table_end - $table_start));
  52. $output .= nl2br(mb_substr($post, $table_end));
  53. return $output;
  54. }
  55.  
  56. echo parsePost($str);
  57.  
  58. ?>
  59.  
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
going to<br />
write some<br />
<table class="table table-striped table-bordered">
    <thead>
        <td>test</td>
        <td>test</td>
        <td>moo</td>
        <td>a</td>
    </thead>
    <tr>
        <td>test</td>
        <td>moo</td>
    </tr>
    <tr>
        <td>test</td>
        <td>test</td>
        <td>moo</td>
        <td>a</td>
    </tr>
</table><br />
text<br />
here