[php] preg_split met aanhalingstekens en komma's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Ik wil een string zoals bijvoorbeeld die hieronder opsplitsen:

"jan", "10", "man", "blaah, blaah, blaah"
"petra", "89,"vrouw", "biografie, dit is mijn blaah"

Ik wil zo'n zin om vormen naar een array waar ik maar 2 items in array krijg namelijk.
[1] jan
[2] 10
[3] man
[4] blaah, blaah, blaah

Ben al wezen stoeien met preg_split of ik rkijg de komma wel weg maar niet de aanhalingstekens of andersom. of ik heb:

[1] "jan
[2] 10
[3] man
[4] blaah"

dit kreg ik met deze pattern string "/\", \"/"

Al gekeken op php.net en google voor hoe mijn string pattern eruit moet zien maar wordt daar totaal niet wijzer van heeft iemand of een idee hoe ik dit moet aanpakken of ergens een goede tutorial voor hoezo pattern eruit moet zien?

Alvast bedankt! :)

W3designer.nl


Acties:
  • 0 Henk 'm!

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 18-09 23:26

Tjark

DON'T PANIC

quick and dirty, mits er geen \" voorkomen:
$array = explode(',',str_replace('"','',$string))

anders evt nog \" vervangen door "

[ Voor 38% gewijzigd door Tjark op 27-10-2004 15:08 ]

*insert signature here


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

PHP:
1
preg_match_all('|"(.*?)"|',$str,$matches);

Sundown Circus


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Het gaat er mij om dat ik tussen aanhalingstekens bestandsnamen van php kan typen. Inclusief paramters die aande bestanden meegeven moeten worden. dus vandaar dat ik het liefst allemaal tussen aanhalingtekens wil hebben en dan komma gescheiden.

Ik krijg bij deze code
PHP:
1
2
3
$line = '"test123", "blaah", "hoi, hallo, doei"'; 
$elements = preg_split('|"(.*?)"|', $line,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
print_r($elements);
Deze uitkomst
Array ( [0] => test123 [1] => , [2] => blaah [3] => , [4] => hoi, hallo, doei )

[ Voor 39% gewijzigd door DarkSilence op 27-10-2004 16:01 ]

W3designer.nl


Acties:
  • 0 Henk 'm!

Verwijderd

RedRose schreef op 27 oktober 2004 @ 15:15:
PHP:
1
preg_match_all('|"(.*?)"|',$str,$matches);
Ehm, wordt hier ook niet de ', ' meegenomen? Die staan namelijk ook tussen "".. En waarom staat er een '?' bij? Dat heeft toch geen zin als er voor '.*' staat?

edit: ja dus :P

[ Voor 15% gewijzigd door Verwijderd op 27-10-2004 16:04 ]


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Verwijderd schreef op 27 oktober 2004 @ 16:04:
[...]


Ehm, wordt hier ook niet de ', ' meegenomen? Die staan namelijk ook tussen "".. En waarom staat er een '?' bij? Dat heeft toch geen zin als er voor '.*' staat?

edit: ja dus :P
Haha, ja idd die komma's staan ook tussen aanhalingstekens maar die wil ik toch niet gebruiken. Hmmm wat is dit lastig. Als ik de ? weghaal gooit hij alles in een entry van de array.

[ Voor 7% gewijzigd door DarkSilence op 27-10-2004 16:07 ]

W3designer.nl


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
.* en .*? verschilt in "Greediness" (zie de FAQ, werk van Arien is erg uitgebreid daarover).

Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt in ieder geval een extra functie schrijven om dan alleen de even elementen uit die array te halen, maar da's een beetje vies, met 100% regexp is veel netter ;)
Probeer eens iets als
PHP:
1
preg_match_all('|"(.*?)", |',$str,$matches);

Ik ben ook geen expert op het gebied, maar af en toe, heel af en toe typ ik er warempel een uit de losse pols goed :P

Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Verwijderd schreef op 27 oktober 2004 @ 16:12:
Je kunt in ieder geval een extra functie schrijven om dan alleen de even elementen uit die array te halen, maar da's een beetje vies, met 100% regexp is veel netter ;)
Probeer eens iets als
PHP:
1
preg_match_all('|"(.*?)", |',$str,$matches);

Ik ben ook geen expert op het gebied, maar af en toe, heel af en toe typ ik er warempel een uit de losse pols goed :P
Hehe :9, bijna helemaal idd krijg nu als resultaat
Array ( [0] => test123 [1] => blaah [2] => "hoi, hallo, doei" )

Het enige wat ik het liefst zou willen is dat ik kan aangeven dat hij ofzo " of ", eindigen moet. maja anders plak ik overal wel , achteraan. Maar dan werkt hij voor de rest helemaal zoals hij moet.

PHP:
1
2
$line = '"test123", "blaah", "hoi, hallo, doei"'; 
$elements = preg_split('|"(.*?)", |', $line,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

W3designer.nl


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

DarkSilence schreef op 27 oktober 2004 @ 15:58:
Het gaat er mij om dat ik tussen aanhalingstekens bestandsnamen van php kan typen. Inclusief paramters die aande bestanden meegeven moeten worden. dus vandaar dat ik het liefst allemaal tussen aanhalingtekens wil hebben en dan komma gescheiden.

Ik krijg bij deze code
Splitten is niet matchen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
$str = '"c:/inetpub/wwwroot/splut.php",
"/home/splut/www/blaaah.php -u, -l", 
"http://splut.nl/blaaah.php?moowh=splat,/home/splut/www/blaaah.php",
"-blaah,+u, blaah"';

preg_match_all('|"(.*?)"|',$str,$matches);
echo '<pre>match_all:<br />';
print_r($matches);
echo 'splitted:<br />';
$splitted = preg_split('/(^"|", "|"$)/',$str,-1,PREG_SPLIT_NO_EMPTY);
print_r($splitted);


lees ff de manual van a to z bij php over het verschil ;)

[ Voor 26% gewijzigd door RedRose op 27-10-2004 16:40 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
RedRose schreef op 27 oktober 2004 @ 16:40:
[...]


Splitten is niet matchen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
$str = '"c:/inetpub/wwwroot/splut.php",
"/home/splut/www/blaaah.php -u, -l", 
"http://splut.nl/blaaah.php?moowh=splat,/home/splut/www/blaaah.php",
"-blaah,+u, blaah"';

preg_match_all('|"(.*?)"|',$str,$matches);
echo '<pre>match_all:<br />';
print_r($matches);
echo 'splitted:<br />';
$splitted = preg_split('/(^"|", "|"$)/',$str,-1,PREG_SPLIT_NO_EMPTY);
print_r($splitted);


lees ff de manual van a to z bij php over het verschil ;)
Oké kan ik dus beter matchen maar waarom krijg ik een twee demetsionale array?
Kan ik een bestaande araay met regels van een tekst document laten matchen en heb ik dan ook een 2 demtsionale araay?

W3designer.nl


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

De reden waarom je een tweedimensionale array krijgt staat vermeldt bij de voortreffelijke php-manual, op www.php.net/preg_match_all.

Tweede vraag: dat hangt van de tekst af en aan de hand daarvan kan je eventueel je pattern aanpassen.

Sundown Circus


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
RedRose schreef op 27 oktober 2004 @ 17:33:
De reden waarom je een tweedimensionale array krijgt staat vermeldt bij de voortreffelijke php-manual, op www.php.net/preg_match_all.

Tweede vraag: dat hangt van de tekst af en aan de hand daarvan kan je eventueel je pattern aanpassen.
Zij er ook mensen die ini bestandjes uitlezen of komma gescheiden bestanden in php?

[ Voor 38% gewijzigd door DarkSilence op 27-10-2004 20:21 ]

W3designer.nl


Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Topicstarter
Hoe lezen jullie ini bestanden of andere komma gescheiden bestanden uit? Zoals CSV bestandjes. ik ben toch niet de enige die met zo'n soort bestand wil werken?

W3designer.nl

Pagina: 1