[php]string ontleden

Pagina: 1
Acties:
  • 125 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer met php een string te ontleden en daar wijzigingen in aan te brengen. dus bijvoorbeeld
ik voel me zo een noob[img="noob.jpg"]dat ik dit moet vragen
moet worden
ik voel me zo een noob <img src="noob.jpg">dat ik dit moet vragen
in C zou ik gewoon door de string heen steppen door me pointertje te verplaatsen...
C:
1
2
3
4
5
6
7
8
9
10
11
12
while(buf[0]!='\0')
{
   if(buf[0] == '[')
   {
      .
      .
      .
   }
   .
   .
buf++;
}

maar in php kan ik niets vergelijkbaars vinden om gewoon even de string door te lopen. dat het kan twijfel ik niet over. het zal zelfs zeer simpel zijn ;) maar ik kan het nergens vinden

Acties:
  • 0 Henk 'm!

  • Kvn
  • Registratie: Maart 2001
  • Laatst online: 20-09 23:30

Kvn

Is het niet handiger om gewoon iets met str_replace of ereg_replace te doen?

Acties:
  • 0 Henk 'm!

  • aegis
  • Registratie: Augustus 2002
  • Laatst online: 21:14
je zou bijvoorbeeld even kunnen kijken naar str_replace ofzo op php.net denk dat dat wel redelijk duidelijk moet zijn voor je.

https://bettyskitchen.nl


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Wat je wil is gewoon een ubb parser maken. Dat kan je met str_replace ed doen, maar bij veel ubb wordt dat onoverzichtelijk en imho niet zo netjes.

Dan kan je beter kijken naar de parser die .oisyn heeft geschreven. Die gebruiken ze hier op GoT ook (een aangepaste versie).

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

Een tokenizer is toch de basis van een goede stack-based parser; een parser gebaseerd op reguliere expressies is toch altijd sub-optimaal.
Iig zal je een pointer moeten bijhouden naar het huidige karakter:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$i = 0;
$l = strlen($buf);
while ($i < $l)
{
  if ($buf[$i] == '[')
  {
    // ...
  }

  $i++;
}

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt! die tokaniser en die link naar die ubb parser heb ik echt wat aan. ik ga meteen weer aan de slag ;)

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Er zijn veel betere oplossingen dan de string doorlopen...
preg_match en preg_replace zijn daar mooie functies voor.

Acties:
  • 0 Henk 'm!

Verwijderd

Depress schreef op dinsdag 28 november 2006 @ 12:39:
Er zijn veel betere oplossingen dan de string doorlopen...
preg_match en preg_replace zijn daar mooie functies voor.
Een stack-based parser heeft meer voordelen en is veel makkelijker uit te breiden. In het begin moet je alleen even veel werk verzetten of van iemand anders de code lenen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

mithras86 schreef op dinsdag 28 november 2006 @ 09:32:
Wat je wil is gewoon een ubb parser maken. Dat kan je met str_replace ed doen, maar bij veel ubb wordt dat onoverzichtelijk en imho niet zo netjes.

Dan kan je beter kijken naar de parser die .oisyn heeft geschreven. Die gebruiken ze hier op GoT ook (een aangepaste versie).
Correctie, ze gebruiken hier op GoT mijn code highlighter, niet mijn ubb parser ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

crisp schreef op dinsdag 28 november 2006 @ 09:33:
Een tokenizer is toch de basis van een goede stack-based parser; een parser gebaseerd op reguliere expressies is toch altijd sub-optimaal.
Iig zal je een pointer moeten bijhouden naar het huidige karakter:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$i = 0;
$l = strlen($buf);
while ($i < $l)
{
  if ($buf[$i] == '[')
  {
    // ...
  }

  $i++;
}
Characters indexeer je in PHP met {}, niet met [] ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

.oisyn schreef op dinsdag 28 november 2006 @ 12:52:
[...]


Characters indexeer je in PHP met {}, niet met [] ;)
String access and modification by character

Characters within strings may be accessed and modified by specifying the zero-based offset of the desired character after the string using square array-brackets like $str[42] so think of a string as an array of characters.

Note: They may also be accessed using braces like $str{42} for the same purpose. However, using square array-brackets is preferred because the {braces} style is deprecated as of PHP 6.
;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wrong. :)
{} vs []
You can currently use both {} and [] to access string indexes. But the {} notation will raise an E_STRICT in PHP5.1 and will be gone totally in PHP6. Also the [] version will gain substr and array_slice functionality directly - so you could do "[2,]" to access characters 2 to the end, etc. Very handy.
edit:
Damn you, crisp. :P

[ Voor 4% gewijzigd door NMe op 28-11-2006 13:07 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 21:10

pietje63

RTFM

Ik heb laatst quickerubb als basis gebruikt voor een cms. Deze is stack-based en goed aan te passen.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat een dorks, in php4 was [] juist deprecated. Ze weten ook echt niet wat ze willen he :D
String access and modification by character
Characters within strings may be accessed and modified by specifying the zero-based offset of the desired character after the string in curly braces.

Note: For backwards compatibility, you can still use array-brackets for the same purpose. However, this syntax is deprecated as of PHP 4.

[ Voor 49% gewijzigd door .oisyn op 28-11-2006 13:45 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb nu dus een stack based parsertje geschreven. voornamelijk omdat ik het dus wat uitgebreider wil.

bijvoorbeeld
code:
1
[img width=12 align=left]plaatje.gif[/img]
en ondanks dat ik vermoed dat preg_replace enzo wat efficienter zijn, vind ik dit handiger ;) je kan er alles mee wat je zelf wilt en je zit niet vast aan een standaard stukje code dat je niet kan veranderen...

voornaamse was dat ik niet wist dat php het ook pikt als je gewoon er doorheen stept :D

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Regular expressions hoeven helemaal niet efficiënter te zijn hoor, ze schelen hooguit wat in de ontwikkeltijd. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
En zelfs dat valt vaak nog wel mee zodra je regular expressions van een halve kilometer lang krijgt die je moet debuggen. Ik heb me in ieder geval vaak genoeg een tijdje blind lopen staren op complexe regular expressions.
Pagina: 1