Avatar billede lassel Nybegynder
07. juli 2005 - 22:11 Der er 6 kommentarer og
1 løsning

Parse fra dynamisk streng.

Hey,

Mit nybegynder-hovede er ved at koge over ;)

Hvordan kan jeg smartest trække følgende ud som en selvstændig variabel:

Strengens struktur:
INSERT INTO rssdata VALUES ('','tekst1', 'tekst2', 'tekst3', 'tekst4');

Tekst1, tekst2, tekst3 og tekst4 kan variere i indhold og længde og tegn... dvs, det kan være betydelig lange strenge.

Det jeg har som strengvariabel er som ovenstående struktureret, og ønsker at "parse"/trække tekst2 ud som en selvstændig variabel ude '' omkring. Dvs. en $tekst2 = "tekst2";

Nogen der har en idé :o)
Avatar billede jakobdo Ekspert
07. juli 2005 - 22:31 #1
Hvad med noget i denne stil:

<?

$test = "INSERT INTO rssdata VALUES ('','tekst1', 'tekst2', 'tekst3', 'tekst4');";
if (preg_match_all('/\'(\\w*)\'/', $test, $matches))
{
    echo "<pre>";
    print_r($matches);
    echo "</pre>";
}

?>
Avatar billede lassel Nybegynder
07. juli 2005 - 22:44 #2
Tjaaaaa, det var lidt der-hen-af, men ikke helt fint dog.

Jeg testede den op imod tre forskellige tilfælde, og kun hos det ene lykkedes det "lidt".

Det var i et tilfælde hvor tekst2 startede med "ord's ord ord ord ord", og det blev kun første ord den fangede.

Hvis det kan være nogen hjælp starter tekst2 efter , ' og kommer før ', hvilket er unikt i forhold til hvad tekst2 i sig selv indeholder... problemet opstår når tekst2 indeholder tegn som parseren "genkender" som afbryder ;)

Men tak, det er på vej, forstår bare ikke alt det der '/\'(\\w*)\'/'
Avatar billede lassel Nybegynder
07. juli 2005 - 22:46 #3
Hov, og det er ikke kun "første" ord i tekst2 den skal fange, det skal selvfølgelig være alle ord, så der skal et eller andet "whitespace" inkluderes...?
Avatar billede xyborx Nybegynder
07. juli 2005 - 22:51 #4
Hvad så med:

$str="INSERT INTO rssdata VALUES ('','tekst1','tekst2','tekst3','tekst4');";
$values=explode("','",substr($str,strpos($str,'(')+2,strrpos($str,')')-strlen($str)-1));
$tekst2=$values[2];

Den tager alt imellem den første og sidste parantes og deler det op i et array hver gang den ser ','

Det kan dog give problemer hvis du har en tekst som rent faktisk indeholder ','
Avatar billede lassel Nybegynder
07. juli 2005 - 23:08 #5
Jep, bortset fra at der var mellemrum mellem ' og , men den kunne jeg godt selv rette ;) Og så var det $values[1] jeg skulle bruge, men det funger fint.

Smæk et svar, og så har jeg bare et nyt mini-problem :D

Strengen skulle selvfølgelig bruges i en mysql-query, og nu bøvler det når man benytter WHERE attribut = '$tekst', når noget i $tekst indeholder et ' hehe, for så slutter den selvfølgelig der... hmmmm, men jeg finder et eller andet, tak for hjælpen.
Avatar billede xyborx Nybegynder
07. juli 2005 - 23:14 #6
Så lægger jeg da et svar.

Og mysql_escape_string() er din ven ;)
Avatar billede lassel Nybegynder
07. juli 2005 - 23:26 #7
tak ;)
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