Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Merkkijono tiettyjen merkkijonojen välissä

Matso [11.08.2006 20:39:46]

#

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.

Antti Laaksonen [11.08.2006 21:02:03]

#

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.php?tunnus=phpsl

Matso [11.08.2006 21:30:20]

#

Okei, kiitos.

msdos464 [12.08.2006 14:00:52]

#

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 :)

kayttaja-2791 [12.08.2006 15:11:51]

#

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.

porzi [14.08.2006 19:08:22]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta