Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Preg_match_all i parser znaczników
Forum PHP.pl > Forum > Przedszkole
Sekwer
Witam, męczę się z parserem znaczników coś w rodzaju bbcode (ale to nie będzie bbcode) za pomocą preg_match_all.

Chciałbym, żeby parsowało znaczniki na końcu stringu, np:

CODE
[znacznik]
obszar znacznika pierwszego

[znacznik] obszar znacznika drugiego [/znacznik]

[/znacznik]


Czytałem w dokumentacji o offset ale nie wiem za bardzo jak to zastosować.
Może ktoś miał ww. problem?
piotrooo89
co dokładnie chcesz otrzymać? pokaż to na przykładzie najlepiej.
_Martin_
Nie wiem czy ci to pomoże ja za pomocą arraya to sprawdzam i działa mi znacznik np code w drugim znaczniku code!

  1. <?php
  2.  
  3. $aTextCodesEx = array(
  4. '/\[cytat:(.*?)\]([\s\S]*?)(\[\/cytat\])/' => array('<div class="sheet-info"><div class="sheet-text">\\1 napisal:</div></div><div class="sheet-info"><div class="sheet-text">\\2</div></div>', 3),
  5. '/\[cytat]([\s\S]*?)(\[\/cytat\])/' => array('<div class="sheet-info"><div class="sheet-text">\\1</div></div>', 3),
  6. '/\[url=(.+?)\]/i' => array('<a href="\\1">', 1),
  7. '/\[\/url\]/i' => array('</a>', 1),
  8. );
  9.  
  10. function escapequote($s) {
  11. return preg_replace("/(\r\n)|\n/", "<br/>", preg_replace("/'/", "\\'", str_replace('"', '"', $s)));
  12. return preg_replace("/(\r\n)|\n/", "<br/>", (preg_replace("/'|\"/", "\\".'"', stripslashes($s))));
  13. }
  14.  
  15.  
  16. Przy wysyłaniu formularza:
  17.  
  18. require GL_SYSDIR . 'types.class.php';
  19. $sTresc = new PString($_POST['tresc']);
  20. $sTytul = new PString($_POST['tytul']);
  21.  
  22.  
  23.  
  24.  
  25. Tresc types.class.php :)
  26.  
  27.  
  28.  
  29.  
  30. abstract class GLVar
  31. {
  32. protected $sPrintable;
  33. protected $sProtected;
  34.  
  35. function __toString()
  36. {
  37. return strval($this->sProtected);
  38. }
  39.  
  40. public function printable()
  41. {
  42. return $this->sPrintable;
  43. }
  44. }
  45.  
  46. class String extends GLVar
  47. {
  48. function __construct($sData)
  49. {
  50. $this->sProtected = addslashes($sData);
  51. $this->sPrintable = htmlspecialchars($sData);
  52. }
  53. }
  54.  
  55. class PString extends String
  56. {
  57. function __construct($sData)
  58. {
  59. $sData = stripslashes($sData);
  60.  
  61. parent::__construct($sData);
  62. }
  63. }
  64.  
  65. class Int extends GLVar
  66. {
  67. function __construct($sData)
  68. {
  69. $this->sPrintable = $this->sProtected = intval($sData);
  70. }
  71. }
  72.  
  73. class UInt extends Int
  74. {
  75. function __construct($sData)
  76. {
  77. $sData = intval($sData);
  78. if ($sData < 0)
  79. $sData = 0;
  80.  
  81. parent::__construct($sData);
  82. }
  83. }
  84.  
  85. class Bool extends GLVar
  86. {
  87. function __construct($sData)
  88. {
  89. $this->sPrintable = $this->sProtected = (bool) ($sData);
  90. }
  91. }
  92.  
  93. ?>
  94.  
  95.  

1 Znaczniki odpowiedzialne za otwierania a drugi za zamykanie smile.gif
Jeszcze nie mam funkcji do sprawdzania czy został zamknięty podczas wywyłania formularza ale to da sie zrobić ;D

a Taka ciekawosta rozwiązanie tablicy z [b] [c] mam cos takiego, zawsze coś innego ;D

  1. $aTextCodes = array(
  2. array('plus', 'img', 'img/icon_plus2.gif', 'src'),
  3. array('s', 'span', 'text-decoration: line-through;', 'style'),
  4. array('size', 'font', '4', 'size'),
  5. array('b', 'span', 'font-weight: bold;', 'style'),
  6. array('i', 'span', 'font-style: italic;', 'style'),
  7. array('u', 'span', 'text-decoration: underline;', 'style'),
  8. array('center', 'div', 'text-align: center;', 'div'),
  9. array('center', 'div', 'text-align: center;', 'div'),
  10. );


W Razie czego pisz ;P Moze pomogłęm cos ;P
Sekwer
Hej, poradziłem sobie z tym.

Czasami najprostsze rzeczy są najlepsze smile.gif

Macie po plusiku za chęci smile.gif
wookieb
Spójrz na mój parser BbCode (link w sygnaturce). Pomimo swojej nazwy idealnie nada się do tego co aktualnie chcesz uzyskać.
Sekwer
Twojego parsera nie widziałem, ale już pięknie sobie poradziłem z regexami.
Odpowiedź była prostsza niż myślałem...

Pozdrawiam smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.