Avatar billede thulstrup Nybegynder
07. juli 2003 - 11:39 Der er 13 kommentarer og
1 løsning

Mere regular expressions

Spørgsmået er en forsættelse af: http://www.eksperten.dk/spm/373465

Jeg har en tekst hvor i jeg skal finde alle priser og gemme dem i en streng for sig selv. Det fik jeg hjælp til i det andet spørgsmål:

if (preg_match_all("/[0-9]+,(-|[0-9]+)/", $indhold, $r)) {
    $priser = join(' ',$r[0]);
}

Mit nye problem er så at teksten og priserne skal gerne passe sammen liniemæssigt, selv om de er i to forskellige strenge (det skal vises i to tekstfelter ved siden af hinanden, så beskrivelsen af vin og prisen skal jo gerne stp på samme linie).

$indhold = "Udvalg af Rødvine:\n\n2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,- \n1999 Saint-Joseph, Domaine Rochevin, Rhone 225,-";

Det må være noget med at finde alle \n og så teste om teksten i mellem to \n indeholder en pris. Hvis den gør det så tilføj prisen til $priser. Hvis den ikke indeholder en pris så tilføj et <br> til $priser.
Der skal også tages højde for at der kan være dobbelt linieskift (\n\n), hvis det er tilfældet skal der jo tilføjes to <br> til $priser.
Avatar billede erikjacobsen Ekspert
07. juli 2003 - 11:59 #1
Hvad skal der præcis stå som svar?
Avatar billede dmdisco Nybegynder
07. juli 2003 - 12:03 #2
kan du ikke bruger
$indhold = str_replace("\n", "<br>", $indhold);
Avatar billede erikjacobsen Ekspert
07. juli 2003 - 12:10 #3
Hvad med:

$indhold = "2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,-\n
1999 Saint-Joseph, Domaine Rochevin, Rhone 225,88\n
2000 Chateau Haut La Greniere, Saint Emilion 190,-";

function xxx($a,$b) {
    return "$a koster $b";
}

if (preg_match_all('/^(.+?)\s*([0-9]+,(-|[0-9]+))$/m', $indhold,$r)) {
  $svar=join("<br>",array_map("xxx",$r[1],$r[2]));

  print_r( $svar);
}
Avatar billede thulstrup Nybegynder
07. juli 2003 - 12:22 #4
Ok, det var vist ikke så forståeligt. Måske giver det mere mening hvis I kigger her: http://www.turbinehallen.dk/priser.php

Beskrivelse og pris skal stå på samme linie, selv om det er to forskellige strenge.

erik >> den retunere kun linier der indeholder en pris. Det er desuden meget vigtigt at priserne og resten af teksten bliver gemt i to forskellige strenge.
Avatar billede erikjacobsen Ekspert
07. juli 2003 - 12:36 #5
Jeg forstår ikke hvad du mener uden et eksempel.
Avatar billede thulstrup Nybegynder
07. juli 2003 - 12:49 #6
Prøv at kig på http://www.turbinehallen.dk/priser.php igen.
$priser skal altså indeholde nogle <br> så priserne bliver placeret rigtigt i forhold til teksten.
Avatar billede erikjacobsen Ekspert
07. juli 2003 - 13:10 #7
Jeg hopper ud igen. Jeg forstår ikke hvad du mener.
Avatar billede thulstrup Nybegynder
07. juli 2003 - 15:00 #8
Det var da pokkers at jeg ikke kan forklare det ordenligt :-(
Jeg prøver lige igen. Vi har variablen $indhold som indeholder tekst og priser:

$indhold = "Udvalg af Rødvine:\n\n2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,- \n1999 Saint-Joseph, Domaine Rochevin, Rhone 225,-";


Den tekst skal opdeles i to variabler $indhold og $priser. Jeg gennemgår teksten linie for linie for at beskrive hvad det er jeg søger:

1. linie: Udvalg af Rødvine: (denne linie indeholder ingen pris, derfor skal der istedet tilføjes et <br> til $priser.)

2. linie: 2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,- (denne linie indeholder en pris, derfor skal de 120,- tilføjes til $priser.)

3. linie: 1999 Saint-Joseph, Domaine Rochevin, Rhone 225,-(denne linie indeholder en pris, derfor skal de 225,- tilføjes til $priser.)
Avatar billede thulstrup Nybegynder
07. juli 2003 - 15:01 #9
Jeg håber du hopper ind igen erik :-) jeg har virkelig brug for hjælp til den her.
Avatar billede sostack Nybegynder
08. juli 2003 - 10:02 #10
Prøv med:
<?php
$indhold = "Udvalg af Rødvine:\n\n2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,-\n1999 Saint-Joseph, Domaine Rochevin, Rhone 225,-";
$linier = explode("\n", $indhold);
for($i = 0; $i < count($linier); $i++)
{
    if(ereg("[0-9\,-]" , $linier[$i]))
    {
    $priser = strrchr($linier[$i], " ") . "<br />";
    $linier[$i] = substr($linier[$i], 0, strlen($linier[$i]) - strlen($priser));
    } else {
    $priser = "<br />";
    }
echo $linier[$i] . $priser;
}
?>

Du skal være opmærksom på, at der ikke må være "mellemrum" efter prisen, før "\n", for så virker det ikke!

//sostack
Avatar billede thulstrup Nybegynder
08. juli 2003 - 14:01 #11
Det er super det script sostack! Der er bare nogle få problemer. Der kommer nogle ord med i $priser strengen.

Mit script ser i øjeblikket sådan her ud::

$indhold = "<font face=\"standard\" size=\"8\" color=\"#666666\">Forslag på Aperitif:\r\n\r\nMumm Cordon Rouge, Brut 50,- \r\nCh. Monluc, Rosé 30,- \r\nMartini rosé, hyldeblomst & lime 25,- \r\n\r\n\r\nUdvalg af hvidvin:\r\n\r\n*2002 Chardonnay, Siete Vineyard, Santa Molina, Chile 120,- \r\n\r\n2000 Cotes Du Rhone, Guigal 220,- \r\n\r\n2000 Balera, Cortese DOC, Icardi, Piemonte 145,- \r\n\r\n2000 Riesling trocken, Von Unserm, Rheingau, Tyskland 235,-\r\n\r\n2001 Sauvignon Blanc, Saint Clair Marlbough, New Zealand 205,-\r\n\r\n\r\nUdvalg af Rødvine:\r\n\r\n*2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,- \r\n\r\n1999 Saint-Joseph, Domaine Rochevin, Rhone 225,- \r\n\r\n2000 Chateau Haut La Greniere, Saint Emilion 190,-\r\n\r\n2001 Shiraz, Delicato, California 190,-\r\n\r\n2000 Trigaio, Feudi Di Gregorio, Campania 180,-\r\n\r\n*Disse vine bruges for øjeblikket til vores ad libitum vin menu.\r\n\r\nEr der specielle ønsker til vin menuen, kommer vi gerne med forslag.\r\nVi har et stort udbud af vine.</font>";

$indhold = ereg_replace(" \r\n", "\n", $indhold);
$indhold = ereg_replace("\r\n", "\n", $indhold);

$linier = explode("\n", $indhold);
for($i = 0; $i < count($linier); $i++){
    if(ereg("[0-9\,-]" , $linier[$i])){
        $priser = strrchr($linier[$i], " ") . "<br />";
        $linier[$i] = substr($linier[$i], 0, strlen($linier[$i]) - strlen($priser));
    }else{
        $priser = "<br />";
    }
    echo $priser;
}


Det giver resultatet:

Aperitif:

50,-
30,-
25,-




120,-

220,-

145,-

235,-

205,-




120,-

225,-

190,-

190,-

180,-



forslag.
Avatar billede sostack Nybegynder
08. juli 2003 - 14:35 #12
Hos mig giver det resultatet:
Forslag på Aperitif:

Mumm Cordon Rouge 50,-
Ch. Monluc 30,-
Martini rosé, hyldeblomst 25,-


Udvalg af hvidvin:

*2002 Chardonnay, Siete Vineyard, Santa Molina, 120,-

2000 Cotes Du Rhone, 220,-

2000 Balera, Cortese DOC, Icardi, Pi 145,-

2000 Riesling trocken, Von Unserm, Rheingau, Ty 235,-

2001 Sauvignon Blanc, Saint Clair Marlbough, New Z 205,-


Udvalg af Rødvine:

*2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, 120,-

1999 Saint-Joseph, Domaine Rochevin, 225,-

2000 Chateau Haut La Greniere, Saint E 190,-

2001 Shiraz, Delicato, Cali 190,-

2000 Trigaio, Feudi Di Gregorio, Ca 180,-

*Disse vine bruges for øjeblikket til vores ad libitum vin menu.

Er der specielle ønsker til vin menuen, kommer vi ger forslag.
Vi har et stort udbud af vine.

//sostack
Avatar billede sostack Nybegynder
08. juli 2003 - 14:51 #13
Så skulle det virke:

<?php
$indhold = "Forslag på Aperitif:\r\n\r\nMumm Cordon Rouge, Brut 50,- \r\nCh. Monluc, Rosé 30,- \r\nMartini rosé, hyldeblomst & lime 25,- \r\n\r\n\r\nUdvalg af hvidvin:\r\n\r\n*2002 Chardonnay, Siete Vineyard, Santa Molina, Chile 120,- \r\n\r\n2000 Cotes Du Rhone, Guigal 220,- \r\n\r\n2000 Balera, Cortese DOC, Icardi, Piemonte 145,- \r\n\r\n2000 Riesling trocken, Von Unserm, Rheingau, Tyskland 235,-\r\n\r\n2001 Sauvignon Blanc, Saint Clair Marlbough, New Zealand 205,-\r\n\r\n\r\nUdvalg af Rødvine:\r\n\r\n*2002 Cabernet Sauvignon, Siete vineyard, Santa Molina, Chile 120,- \r\n\r\n1999 Saint-Joseph, Domaine Rochevin, Rhone 225,- \r\n\r\n2000 Chateau Haut La Greniere, Saint Emilion 190,-\r\n\r\n2001 Shiraz, Delicato, California 190,-\r\n\r\n2000 Trigaio, Feudi Di Gregorio, Campania 180,-\r\n\r\n*Disse vine bruges for øjeblikket til vores ad libitum vin menu.\r\n\r\nEr der specielle ønsker til vin menuen, kommer vi gerne med forslag.\r\nVi har et stort udbud af vine.</font>"
;$indhold = ereg_replace(" \r", "\r", $indhold);
$indhold = ereg_replace("\r\n", "\n", $indhold);
$linier = explode("\n", $indhold);
for($i = 0; $i < count($linier); $i++)
{
    $priser = "";
    if(strstr($linier[$i], ",-"))
    {
    $priser = strrchr($linier[$i], " ") . "<br />";
    $linier[$i] = substr($linier[$i], 0, strlen($linier[$i]) - strlen($priser));
    } else {
    $priser = "<br />";
    }
echo  $linier[$i] . $priser;
}
?>

//sostack
Avatar billede thulstrup Nybegynder
08. juli 2003 - 15:51 #14
Yes, så var den der! Mange mange gange tak for hjælpen sostack!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester