[PHP] Splitsen van string op specifieke woorden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 07:38
Misschien is dit voor sommigen een makkie, maar ik kom niet uit het volgende...

Stel, ik heb een stukje tekst:
IF (a < b) THEN IF (a < c) THEN Result = a ELSE Result = c END IF ELSE IF b < c THEN Result = b ELSE Result = c END IF END IF

Jep, het is pseudocode dat ik op wil splitsen! :-)
Wat ik probeer is deze string op te splitsen in samengestelde condities. Dus opsplitsen in:
(a < b)
(a < c)
result = a
result = c
b < c
etc.

Iemand een idee hoe ik dit het beste kan aanpakken? Een mogelijkheid zou misschien kunnen zijn om te splitsen op de pseudocode statements (IF, THEN ELSE, END IF). Maar hoe? Met de meeste splitmethodes kom ik niet verder dan splitsen op 1 enkel karakter.

[ Voor 16% gewijzigd door -W0kk3L- op 28-11-2008 18:00 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Kijk eens hier: http://nl2.php.net/manual/en/function.explode.php

Je zou kunnen exploden op then, else etc. Vervolgens deze termen uit de array verwijderen.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Offf een stack opbouwen na het splitten op spatie.
Dat lijkt me nog de beste manier.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 07:38
Noork schreef op vrijdag 28 november 2008 @ 18:01:
Kijk eens hier: http://nl2.php.net/manual/en/function.explode.php

Je zou kunnen exploden op then, else etc. Vervolgens deze termen uit de array verwijderen.
Volgens mij kun je toch alleen splitsen d.m.v. 1 delimiter op deze manier? Dat is juist het probleem waar ik tegenaan loop. Splitsen op een spatie (en daarna een stack maken) is een optie, maar ik was benieuwd of je ook direct op woorden kunt splitsen.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Quick-and-dirty kan het met preg_split, dan kun je splitsen op (combinaties van) die woorden. Iets als:
PHP:
1
preg_split('/\s*(?:(?:if|else|then|end)\b\s*)+/i', ....)
.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
-W0kk3L- schreef op vrijdag 28 november 2008 @ 18:11:
[...]


Volgens mij kun je toch alleen splitsen d.m.v. 1 delimiter op deze manier? Dat is juist het probleem waar ik tegenaan loop. Splitsen op een spatie (en daarna een stack maken) is een optie, maar ik was benieuwd of je ook direct op woorden kunt splitsen.
Het zal vast kunnen, maar geen idee hoe. Een workaround zou kunnen zijn om b.v. eerst str_replace uit te voeren en zo alle if, then, else strings te replacen door iets anders, waar je later op gaat splitten.

Acties:
  • 0 Henk 'm!

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 07:38
pedorus schreef op vrijdag 28 november 2008 @ 18:12:
Quick-and-dirty kan het met preg_split, dan kun je splitsen op (combinaties van) die woorden. Iets als:
PHP:
1
preg_split('/\s*(?:(?:if|else|then|end)\b\s*)+/i', ....)
.
Array ( [0] => [1] => (a < b) [2] => (a < c) [3] => Result = a [4] => Result = c [5] => (b < c) [6] => Result = b [7] => Result = c [8] => )

100% score! Bedankt! :)

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
99% ;) Je geeft niet de juiste flags, waardoor je een extra onnodige hit krijgt, en er ontbreekt een '\b' (word-boundary) na de eerste '\s*', waardoor iets als 'pif=12312' verkeerd wordt gesplitst.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1