Miten olis mahdollsita poimia merkkijono, joka on joidenkin teittyjen merkkijonojen välissä. Tarvitsisin foorumin kehityksessä, niin esim tyyliin:
tässä lukee[tagi]tässä on tekstiä[/tagi]jotakin
Tuossa pitäisi saada poimittua, mitä noiden tagejen välissä lukee.
Yksi hyvä tapa on käyttää säännöllistä lauseketta:
<?php $teksti = "Tämän [tagi]tekstin[/tagi] joukossa on [tagi]tageja[/tagi]."; preg_match_all("/\\[tagi\\](.*?)\\[\\/tagi\\]/", $teksti, $tiedot); foreach($tiedot[1] as $vali) { echo $vali . "<br>"; } ?>
Näin lihavoidaan tagien välissä oleva teksti:
<?php $teksti = "Tämän [tagi]tekstin[/tagi] joukossa on [tagi]tageja[/tagi]."; $teksti = preg_replace("/\\[tagi\\](.*?)\\[\\/tagi\\]/", "<b>\\1</b>", $teksti); echo $teksti; ?>
Lisää tietoa säännöllisistä lausekkeista:
https://www.ohjelmointiputka.net/oppaat/opas.
Okei, kiitos.
Noissa expressioneissa hämää tällaiset merkkijonohirviöt:
\\](.*?)\\[\\/
hankala yrittää sitten itse keksiä, miten tuollaisen loihtisi
:/
edit: tuo opas vaikuttaa juuri sellaiselta, mität olen etsinyt :)
Vaikea sitä yleensä onkin hahmottaa muiden regexpejä. Usein vähänkään monimutkaisempien kanssa yleensä kirjoitan sen itse alusta loppuun vaikka vähän vastaava olisikin saatavilla, regexpeissä kun ei pahemmin kommentteja näy ;) Mutta ne kannattaa kyllä opetella, siitä on apua paitsi kaikissa ohjelmointikielissä, niin myös monissa muissa tapauksissa, joissa pitää käsitellä esimerkiksi listoja.
Olen tehnyt kätevän funktion merkkijonon sisältä tiettyjen esiintymien välistä hakemista varten.
function betw($eka,$toka,$iso) { $e=strpos($iso,$eka); $t=strpos($iso,$toka); $e=$e+strlen($eka); $sana=substr($iso,$e,$t-$e); return $sana; }
Käyttö vapaasti, mutta omalla vastuulla.
esim:
echo betw("[a]","[/a]","tekstiä[a]jipii[/a]tekstiä...");
Tulostuu : jipii
Aihe on jo aika vanha, joten et voi enää vastata siihen.