Avatar billede tomcraft Nybegynder
14. april 2003 - 23:25 Der er 7 kommentarer og
1 løsning

Søg efter tekst i streng

Kan nogen hjælpe med at vise hvordan jeg fra en given fil der eksempelvis indeholder følgende:
bla-bla-bla- Der er begyndervanskeligheder med PHP og jeg beder om lidt assistance hvis der er nogle der keder sig.

Scriptet skal kunne finde de tre steder i ovennævnte tekst hvor endelsen "eder" forekommer, således at ordene:
begyndervanskeligheder
beder
keder

bliver echoe'et eller eventuelt gemt i en tekstfil.

Jeg har prøvet med følgende:

<?php
$HentStart = //- dit-dat-dut
$HentSlut =  //- dit-dat-dut
$Hentfil = "
$OpenFile = fopen("$Hentfil", "r");
$HentFil = fread($OpenFile, 10000);
$HentData = eregi("$HentStart(.*)$HentSlut", $HentFil, $DataPrint);
fclose($OpenFile);
echo $DataPrint[1];
if (eregi("eder", $DataPrint[1])) {
// udfør dit-dat-dut
}
?>

Venlig hilsen

Anette
Avatar billede tomcraft Nybegynder
14. april 2003 - 23:40 #1
Ups, der skulle have stået:

<?php
$HentStart = //- dit-dat-dut
$HentSlut =  //- dit-dat-dut
$OpenFile = fopen("$Hentfil", "r");
$HentFil = fread($OpenFile, 10000);
$HentData = eregi("$HentStart(.*)$HentSlut", $HentFil, $DataPrint);
fclose($OpenFile);
echo $DataPrint[1];
if (eregi("eder", $DataPrint[1])) {
// udfør dit-dat-dut
}
?>

Sorry.
Avatar billede tefcke Nybegynder
15. april 2003 - 10:57 #2
jeg har lige nogen kommentarer ;-)

Først vil jeg anbefale flg. native funktion:
file_get_contents() -- Reads entire file into a string

Dernæst vil jeg forslå dig at bruge flg. i dit regulære udtryk:
"$HentStart(.+?)$HentSlut"

forklaring - hvis din streng er "keder beder" og $hentStart = "" og $hentSlut = "eder" vil den, med det du skrev, matche mest muligt dvs. "keder beder". Med den jeg lavede vil den ikke være grådig, og derimod matche først mulige. Altså først "keder" og dernæst " beder".

Tilsidst vil jeg anbefale dig at bruge var_dump() til at se hvad du har matched:
<?
print("<pre>");
var_dump($DataPrint);
print("</pre>");
?>
Avatar billede tefcke Nybegynder
15. april 2003 - 11:12 #3
kiggede lige lidt nærmerer på det!

<pre>
<?php
$HentStart = " ";
$HentSlut =  "eder";
$HentFil = "Der er begyndervanskeligheder med PHP og jeg beder om lidt assistance hvis der er nogle der keder sig.";
/*
* SKAL BRUGES I STEDE FOR OVENSTÅENDE!
* $HentStart = "...";
* $HentSlut =  "...";
* $HentFil = file_get_contents("my_file");
*
*/
preg_match_all("/$HentStart(\w+?)$HentSlut/i", $HentFil, $DataPrint);
print_r($DataPrint);
foreach ($DataPrint[0] as $match) {
    print("Matched: $match\n");
}
?>
</pre>
Avatar billede tomcraft Nybegynder
15. april 2003 - 13:48 #4
Tusind tak tefcke. Du har lige reddet min Påske.

P.S.
I løkken:
foreach ($DataPrint[0] as $match) {
    print("Matched: $match\n");
}

hvordan kan jeg nemmest lade en ny variabel bestå af samtlige fundne match ?

God Påske

Anette
Avatar billede tefcke Nybegynder
15. april 2003 - 14:34 #5
Du kan bare bruge variablen $DataPrint. Det er et associativt array hvor [0] indeholder samtlige match der var i strengen!

Evt. : $allMatch = $DataPrint[0];
for at få det som et array.
Avatar billede tomcraft Nybegynder
15. april 2003 - 15:13 #6
Aha

Men uanset hvor jeg end forsøger mig frem med at anbringe:
$allMatch = $DataPrint[0];

så får jeg blot udskrevet $allMatch som "Array" og altså ikke indeholdende eksempelvis "begyndervanskeligheder beder keder".

Øv.
Avatar billede tefcke Nybegynder
15. april 2003 - 15:42 #7
der ligger jo masser af array funktioner som kan hjælpe dig. www.php.net/array

Hvis du vil have den skrevet ud, kan du gennemløbe arrayet, med foreach, som jeg viste.
Hvis du vil have den skrevet ud som en streng "begyndervanskeligheder beder keder" kan du bruge implode() - www.php.net/implode:
print = implode(" ", $allMatch);

Under alle omstændighedder, kan du se et array som en form for beholder til din data ;-)
Avatar billede tomcraft Nybegynder
15. april 2003 - 16:09 #8
OK.

Mange tak og endnu engang God Påske

A.
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