Toon posts:

[PHP] preg & arrays

Pagina: 1
Acties:

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
<?
$maand = array("","Januari","Februari","Maart",
          "April","Mei","Juni","Juli",
          "Augustus","September","Oktober",
          "November","December");
echo preg_replace("/(\d{1,2})-(\d{1,2})-(19|20)(\d{2})/","\\2 $maand[\\3] \\4\\5","25-1-2002");
?>

Ik krijg de volgende foutmelding
code:
1
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /www/htdocs/kjdesign/kj/index.php on line 39

Het probleem is dus dat hij eerst de array met indexnr \\3 wilt tonen ipv dat hij de waarde van \\3 invult zodat er dus uitkomt $maand[1] weet iemand hier een oplossing voor zodat ik eerst de waarde heb ingevoerd voordat hij de array met bijbehorden indexnummer toont? En helaas is de preg_replace een stuk groter vanwege complexiteit kan ik niet uitwijken naar een ander commando :(

  • Glock
  • Registratie: November 2001
  • Niet online
ik weet niet zeker maar dit ik geloof dat je dit moet doen met behulp van de delimiter e.

www.php.net/preg_replace
http://www.php.net/manual/en/ref.pcre.php
http://www.php.net/manual/en/pcre.pattern.modifiers.php

en punt 2 is, je error is een parse error, dit betekend dus dat je een character verkeerd geplaatst heb of dergelijke hoewel ik nou niet zo snel de misplaatsing kan vinden

[edit] welke regel is lijn 39 exact?

  • Glock
  • Registratie: November 2001
  • Niet online
geloof dat ik hem gevonden heb, kijk is of de parse error verdwijnt wanneer je dit heb?
PHP:
1
2
3
<?
"\\2 ".$maand['\\3']." \\4\\5"
?>

[edit]één nutteloos voorbeeld weggehaalt, ander voorbeeld zou in principe moeten werken

Verwijderd

Topicstarter
Iig regel 39 is een regeltje uit een array waar een aantal regexpen instaat ik heb hme ff vereenvoudigd naar wat er in me eerste post staat vandaar dat de regel nu niet van toepassing is... ik ga dat andere ff proberen

helaas mag het niet helpen de tot nu toe gegeven oplossingen :?

  • Glock
  • Registratie: November 2001
  • Niet online
had je ook delimiter e geprobeerd?
deze is van belang bij dit voorbeeld :) :?
en probeer anders is de ' te vervangen door "

Verwijderd

Topicstarter
naar eerst ervaring werkt het nog steeds niet :( moet er straks ff met de delimiter e ff beter nakijken heb ff vergadering nu pauze dus komt wel goed nog vanavond hoop ik :)

Ff verder gekeken maar met de delimiter e geeft ie nu aan dat $maand een array is maar hij geeft niet het element uit die array aan :(

Verwijderd

Topicstarter
Zo te zien is het onmogelijk om een array te gebruiken in een preg_replace en dat het replace gedeelte... jammer

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op vrijdag 25 januari 2002 18:49 schreef Breez-r het volgende:
Het probleem is dus dat hij eerst de array met indexnr \\3 wilt tonen ipv dat hij de waarde van \\3 invult zodat er dus uitkomt $maand[1] weet iemand hier een oplossing voor zodat ik eerst de waarde heb ingevoerd voordat hij de array met bijbehorden indexnummer toont? En helaas is de preg_replace een stuk groter vanwege complexiteit kan ik niet uitwijken naar een ander commando :(
Een string wordt eerder geëvalueerd, dan de regexp. Dus als eerste zal de string geparsed worden. PHP zal niet begrijpen wat die \\3 inhoudt, want PHP kent geen index '\\3' in de array $maand.

Probeer dus eens de modifier e, net zoals Glock zei.

Verwijderd

Topicstarter
De e delimiter voorkomt het nog steeds niet dat de index niet mee wordt genomen

Om het even wat duidelijker te maken:

In plaats van dat hij de \\3 vervangt voor de variabele die is toegekend door de pattern van de preg_replace wilt hij eerst de array afdrukken en dan doet hij dus het volgende: $maand[] ipv dat in dit voorbeeld dit moet doen $maand[1]

  • Glock
  • Registratie: November 2001
  • Niet online
wat jij hier wil doen IS te doen...
en zeker weten met de delimiter e...

ik heb het ook een tijdje gehad dat hij \\1 returnde, maar waar je bij moet opletten is dat je bij delimter e de juiste waardes evalueert..... (klinkt vaag ik weet 't)

heb je de complete manual / reference van deze link doorgelezen, dan zou het ZEKER weten moeten lukken *D :+
http://www.php.net/manual/en/ref.pcre.php

edit: link vergete erbij te zetten
edit2: ik zeg de heletijd delimiter maar ik bedoel daarmee de pattern modifier, de delimiters zijn in dit voorbeeld de '/', sorry voor m'n fout :)

Verwijderd

Topicstarter
Eindelijk een einde aan het verhaal het is gewoon een kwestie van escapen zoals altijd :P

Dit is het stukje source werkend....
Dus laat het een lesje voor mij en jullie zijn het kan wel echter je moet de array escapen om zo te voorkomen dat de array uitgevoerd wordt als een soort van pre-commando nu wordt de array pas na de hele replacement uitgevoerd dus als post-commando

tnx Glock voor je advies
PHP:
1
2
3
4
5
6
7
<?
$maand = array("","Januari","Februari","Maart",
               "April","Mei","Juni","Juli",
               "Augustus","September","Oktober",
               "November","December");
echo preg_replace("/(\d{1,2})-(\d{1,2})-(19|20)(\d{2})/e","'\\1 '. \$maand['\\2'] .' \\3\\4'","25-1-2002");
?>
Pagina: 1