Jos on esimerkiksi kyseinen merkkijono: starttekstiäend (eli alussa "start", sitten "tekstiä", lopuksi "end", ja nuo ovat siis yhteen pötköön, sekä noita merkkijonoja on peräkkäin useampia)
-"start" ja "end1" sanat tiedetään, pituus tiedetään, numero "end" sanan perässä on jokaisessa "end" sanassa eri; siis 1,2,3,4...
-"tekstiä" = voi olla tekstiä, ei sisällä start/end sanoja, pituutta ei tiedetä
Tarkoituksena olisi tulostaa tuo "tekstiä" merkkijonosta. Tiedossa on siis "tekstiä" jälkeen tuleva "end", sekä sen numero: "end{$numero}" ja tietenkin tuo "start" sana ennen "tekstiä".
Tuo ei siis onnistu näin:
$numero = "1"; //numero, jonka perusteella oikea "end" loppu etsitään $kohta = strpos($merkkijono, "end{$numero}"); $teksti = substr($merkkijono, $kohta, -x); //x olisi tekstin pituus, mutta sitä ei tiedetä, joten tämä koodi on turha
Tämä kuulostaa erittäin tyhmältä kysymykseltä, mutta joku varmaan voisi neuvoa ystävällisesti miten tuon ratkaiseminen mahdollisesti onnistuisi. Ratkaisu voisi olla esimerkiksi jokin sellainen joka käyttäisi tuota "start" sanaa hyväksi, eli hakisi tekstiä "end" sanasta lähtien vasemmalle niin kauan kunnes tulee "start" sana vastaan.
Olet oikeilla jäljillä. Tässä on yksi ratkaisu:
<?php $teksti = "abcstartapinaend1abcstartbanaaniend2abcstartcembaloend3abc"; $alku = "start"; $loppu = "end2"; $tulos = substr($teksti, 0, strpos($teksti, $loppu)); $tulos = substr($tulos, strrpos($tulos, $alku) + strlen($alku)); echo $tulos; ?>
Keksiikö joku, kuinka tämän voisi tehdä säännöllisellä lausekkeella?
Kiitos! :)
Jos ymmärsin oikein kysymyksen, niin
STRSTR ja STRREV - alku jää pois ja esimerkki tulostaa haettujen sanojen välisen merkkijonon ja loppu jää pois.
<?php $teksti = "STRSTR ja STRREV - alku jää pois ja esimerkki tulostaa haettujen sanojen välisen merkkijonon ja loppu jää pois.<br>"; echo $teksti; $alku = "alku"; $loppu = strrev("jonon"); $teksti = strstr($teksti, $alku); echo strrev(strstr(strrev($teksti),$loppu) ); ?>
Esimerkki tulostaa siis:
alku jää pois ja esimerkki tulostaa haettujen sanojen välisen merkkijonon
Jos ymmärsin oikein, niin peg ymmärsi väärin.
Antti Laaksonen kirjoitti:
Keksiikö joku, kuinka tämän voisi tehdä säännöllisellä lausekkeella?
Kelpaisiko tämä?
<?php $teksti = "abcstartapinaend1abcstartbanaaniend2abcstartcembaloend3abc"; preg_match_all('/start(.*?)end(\d+)/', $teksti, $taulu, PREG_SET_ORDER); $palat = array(); foreach ($taulu as $osuma) { $palat[$osuma[2]] = $osuma[1]; } var_dump($taulu); var_dump($palat); // array(1 => "apina", 2 => "banaani", 3 => "cembalo"); ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.