[PHP] RegEx probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een (ingewikkeld) regex probleem. Ik heb het zelf natuurlijk geprobeerd, maar ik kom er echt niet uit.

Ik heb de volgende string:

code:
1
0,"122"1,"abc123"1419,"86.60"1416,"84.90"1417,"1.70"1418,"0.00"431,"N"1402,"2.0"1090,"EUR"1376,"KGS"1638,"1.70"99,""


Zoals je je al ziet zit er een patroon in. namelijk [veldnaam],"[waarde]". Er moet een array uit komen rollen in de vorm van: $array[veldnaam] = waarde.

Ik probeer het nu met de volgende regel, maar dat slikt hij niet en ik moet eerlijk zeggen dat ik niet begrijp waarom niet.

PHP:
1
$result_array = preg_split('/(\S+)\,"([^"]+)"/',$string);


Hulde aan de helper!

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
preg_match_all ( '/([0-9]+),"([^"]*)"/', $string, $matches );

Hiermee houd je een array $matches over, waar je de data wel uit kunt halen.

[ Voor 12% gewijzigd door Verwijderd op 17-07-2003 23:41 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
You rule!

Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

smerig, maar werkt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

$string = '0,"122"1,"abc123"1419,"86.60"1416,"84.90"1417,"1.70"1418,"0.00"431,"N"1402,"2.0"1090,"EUR"1376,"KGS"1638,"1.70"99,""';
$matches = array();
preg_replace ('/(\d+),"(.*?)"/e', '\$matches[$1]=\'$2\'', $string );

echo '<pre>';
print_r($matches);
echo '</pre>';

?>

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het nu zo opgelost:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$string = '0,"122"1,"abc123"1419,"86.60"1416,"84.90"1417,"1.70"1418,"0.00"431,"N"1402,"2.0"1090,"EUR"1376,"KGS"1638,"1.70"99,""';

print "$string\n";



preg_match_all ('/([0-9]+),"([^"]*)"/' ,$string ,$result_array ); 

$n = "0";

foreach ($result_array[1] as $val)
{
    $vla[$val] = $result_array[2][$n];
    $n++;
}

print_r($vla);

Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

@Cheatah: heb jij redenen om niet gebruik te maken van meta-characters als die voorhanden zijn (zoals \d ipv [0-9]) of de non-greedy modifier (".*?" vs "[^"]*")?
De laatste kan ik me wat bij voorstellen daar de non-greedy modifier nog niet altijd ondersteund wordt (bv javascript < 1.5), maar de meta-characters vindt ik nog altijd zeer handig; je zult mij ook niet zo snel [a-zA-Z0-9_] zien schrijven omdat \w hetzelfde is :)

Intentionally left blank

Pagina: 1