Kirjoittaja Aihe: PHP preg_match ongelma [ONGELMA KIERRETTY]  (Luettu 2524 kertaa)

odysseus

  • Vieras
PHP preg_match ongelma [ONGELMA KIERRETTY]
« : 13.09.13 - klo:17.24 »
Eli nyt pitäisi saada PHP:llä muutettua tageja tiedostossa tekstiksi.

Tämä koodi toimii muuten (malli ei muuta mitään muuta kuin poistaa tagin turhat tagin osat, mutta toimii), paitsi jos samalla rivillä on kaksi tagia, joihin preg_match osuu, niin menee pieleen.

Tässä on siis tarkoitus saada tekstissä (siis tagissa) oleva osa vaihdettua sen mukaan mitä tarvitaan, tässä tapauksessa kielikäännös, joten tuon "$match[1]":n takana tulee olemaan variable variable, joka viittaa kielikoodiin, jonka alta sopiva teksti vaihdetaan tuon tagin paikalle...

Tagien haku vain mättää nyt jos samalla rivillä on useita! Mitenkäs preg_match sadaan toimimaan niin, että se löytää samasta stringistä useita otoksia? Vai saako?

Ohessa malli:

Koodia: [Valitse]
$p = "/\{_T\((.*)\)\}/";

$f = fopen('./test.txt', 'r+');

while (!feof($f)) {
    $line = fgets($f);
    if (preg_match($p, $line, $match)) {
      $line = str_replace($match[0], $match[1], $line);
      echo $line . "\n";
    }
}

fclose($f);

Ja itse luettava tiedosto malliksi:

Koodia: [Valitse]
tekstiä ja vielä tekstiä ja
pitäis löytää tagi {_T(jeejee)} jne ja myös {_T(joojoo)} ja sellaista.
ja vielä uudelleen {_T(joojoo)} sekä ja semmoista
ja niin pois päin.

« Viimeksi muokattu: 19.09.13 - klo:16.04 kirjoittanut odysseus »

kamara

  • Käyttäjä
  • Viestejä: 2952
    • Profiili
Vs: PHP preg_match ongelma
« Vastaus #1 : 13.09.13 - klo:17.48 »
En ole mikään regexp-taikuri, ja niitä ei välttämättä tällä foorumilla ole paljoa liikkeelläkään.

Suosittelisin kysyvän seuraavista foorumeista:
http://mureakuha.com/keskustelut

Tai
http://www.ohjelmointiputka.net/keskustelu/

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11443
    • Profiili
    • Tomin kotisivut
Vs: PHP preg_match ongelma
« Vastaus #2 : 13.09.13 - klo:18.23 »
preg_match ei taida tehdä mitä kaipaat, mutta miten olisi preg_match_all? http://www.php.net/manual/en/function.preg-match-all.php
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

odysseus

  • Vieras
Vs: PHP preg_match ongelma [ONGELMA KIERRETTY]
« Vastaus #3 : 19.09.13 - klo:16.02 »
Tein tamän nyt sitten hieman ehkä raskaammin.

Nyt kun kyse ei ole aikakriittisestä koodista, niin sallittakoon. Eli päätin lukea koko höskän muistiin (siis kaikki rivit) ja sitten teen sille str_replace() jokaiselle muuntotaulukosta löytyvälle riville.

Siis mulla on nyt taulukot mallilla:

Koodia: [Valitse]
function get_lang_array($lang = "en") {
  $en = array(
    "english text" => "english text",
    "english text2" => "english text2"
  );
  $fi = array(
    "english text" => "suomiteksti",
    "english text2" => "suomiteksti2"
  );
  $es = array(
    "english text" => "texto en español",
    "english text2" => "texto en español2"
  );
  return $$lang;
}

Tässä siis palautan taulokon kielikoodin mukaan "muuttuvalla muuttujalla", eli $$lang ja sitten teen sen replacen koko hoidolle niin monta kertaa kun taulukossa on elementtejä... ja jossa str_replace sisältää sen tagin alun ja lopun, eli tuon "{T_(" ja ")}" osan.

Olisi varmaan voinut olla tehokkaampikin :-)

Edit: Miksi luen rivi kerrallaan, johtuu siitä, että joudun tekemään rivikohtaisia "juttuja" muunkin suhteen... Jos olisikin koko file, niin file_get_contents() ja voéla!


« Viimeksi muokattu: 19.09.13 - klo:16.08 kirjoittanut odysseus »