Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  preg_match_all ja mitme realine string. märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
BullDoze
HV kasutaja
BullDoze

liitunud: 01.03.2005



Autoriseeritud ID-kaardiga

sõnum 28.01.2010 07:12:03 preg_match_all ja mitme realine string. vasta tsitaadiga

Tere

Mul on üks mitme realine fail, kust oleks vaja kätte saada teatud mustri alusel sealt mingid read. Uurisin erinevaid meetodeid, kuidas seda teha ja leidsin sellise funktsiooni nagu preg_match_all, katsetasin teada veits, aga tuli välja, et kui string sisaldab mitut rida, siis ta ei tööta, kui kogu jutt on ühe rea peal, siis töötab nagu vaja.

Kood mis ei tööta:

$string = '00-00-01 00-00-02
               00-00-03 00-00-04 00-00-05';
preg_match_all('/00-00-02(.*)00-00-05/', $string, $valja);
for($i=0; $i < count($valja); $i++){
   print_r($valja[$i]);
}


Kas ta ei peagi nii töötama või teen ma midagi valest? Kui stringi väärtus oleks ühel real, siis töötab.
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 14
tagasi üles
vaata kasutaja infot saada privaatsõnum
XYZ
HV Guru
XYZ

liitunud: 05.11.2001




sõnum 28.01.2010 09:15:39 vasta tsitaadiga

Otsitav string ise mitmel real lähteandmeis? Sel juhul on sinna sisse tekkinud reavahetusmärke ja see ei ole sama string mida sa otsid... icon_wink.gif
Võimalik on kuskil puhvris koristada minema kõik reavahetused ja saadud suurest stringist/baitmassiivist otsida alamstringi, s.t. sinu otsitavat stringi. See on üks võimalus asjale lähenemiseks.... Oleneb tegelikust eesmärgist, kas see on üldse rakendatav.
Kommentaarid: 81 loe/lisa Kasutajad arvavad:  :: 3 :: 12 :: 56
tagasi üles
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 28.01.2010 10:04:25 vasta tsitaadiga

Selle jaoks on olemas spetsiaalsed lisaparameetrid selle otsingustringi järel.
preg_match_all('/00-00-02(.*)00-00-05/s', $string, $valja);
/s annab . märgile reavahetuste matchimise supporti, /i annaks tõusutundetuse (qwe otsimisel klapib ka QWE) ja neid on veel.
http://www.regular-expressions.info/modifiers.html siin kirjas ka et /s paneb single line modesse ehk käsitletakse kogu stringi nagu ühe reana.

Üks lisa näpunäide veel mida võid juba teada või võid ka mitte.
Kui sul on selline string
$string = '00-00-02 tekst 00-00-05 00-00-05';
Ja sa tahad sealt saada sealt ainult osa "tekst" mitte "tekst 00-00-05" siis (.*) asemel tuleb kasutada (.*?) mis muudab regexpi mitteahneks ehk lõpetatakse esimese matchi peale.
Ilma selleta näiteks preg_replace('/<span(.*)>(.*)<\/span>/', '','<span>t</span>plapla<span>e</span>') annab tühistringi kuigi esmase hooga loodaks tagasi saada "plapla". Tööle hakkaks oodatult alles nii: preg_replace('/<span(.*?)>(.*?)<\/span>/', '','<span>t</span>plapla<span>e</span>')

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
BullDoze
HV kasutaja
BullDoze

liitunud: 01.03.2005



Autoriseeritud ID-kaardiga

sõnum 28.01.2010 19:22:48 vasta tsitaadiga

Suured tänud teile! /s oli tõesti see mis oli puudu ja ? aitas ülesannet lõplikult lahendada.
Kommentaarid: 15 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 14
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  preg_match_all ja mitme realine string.
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.