Reguláris kifejezések
Üdv!
Van egy string változóm amibe több soros szöveg van.
Egy olyan részt akarok kinyerni belőle, ami az alábbi feltételeknek felel meg:
(xy) ??? (zv)
Már mindenhogy próbáltam, de nem sikerült. A ??? helyén nem tudom milyen szöveg van, de azt tudom hogy mi van közvetlen előtte és utána. Na most azt a részt szeretném kinyerni a szövegből, ami a két ismert rész között van (az ismeretlent).
Köszönöm előre is a válaszokat!
■ Van egy string változóm amibe több soros szöveg van.
Egy olyan részt akarok kinyerni belőle, ami az alábbi feltételeknek felel meg:
(xy) ??? (zv)
Már mindenhogy próbáltam, de nem sikerült. A ??? helyén nem tudom milyen szöveg van, de azt tudom hogy mi van közvetlen előtte és utána. Na most azt a részt szeretném kinyerni a szövegből, ami a két ismert rész között van (az ismeretlent).
Köszönöm előre is a válaszokat!
preg_match
talán így
esetleg így?
csak a köztes rész kell, ha minden igaz
Ha van zárójel, akkor nem jó
print_r($matches); eredménye:
Array ( [0] => xy) ??? (zv [1] => ) ??? ( )
Tehát ott van még a zárójel is.
Az én megoldásom:
preg_match("/(\(xy\)\s)(.*)(\s\(zv\))/",$szoveg,$matches);
print_r($matches);
Eredmény:
Array ( [0] => (xy) ??? (zv) [1] => (xy) [2] => ??? [3] => (zv) )
Tehát $matches[2] az ami neked kell. Nem biztos, hogy ez a jó, mert kezdő vagyok regexp-ben, de próba cseresznye :))
preg_match
flag-ekkel állítható
Az 'm' flag-el kapcsolod ezt be.
preg_match('/xy(.*)zv/m',$szoveg,$talalat);
Kíváncsivá tettél. Mihez kell neked, ha nem titok :)
Írj egy konkrét példát lécci, hátha van még, amit nemvettünk figyelembe.
köszi szépen hogy ilyen segítőkész vagy :)
Ez az egész arra kell hogy több szövegből kinyerjek bizonyos adatokat. Egy szövegkörnyezetbe vannak személyes adatok név, cím, telszám, stb. Na most a ??? azért ismeretlen, mert ciklusba néz meg több szöveget.
Ja és egy ciklus lefutásban több ilyen vizsgálat is van. Ha egy sorban vizsgálódok akkor ez jól működik:
preg_match('(xy.*zv)', $hol, $hova);
De ebben az esetben nincs találat:
kj sdkgjhdj XY kfhkdjfh
dfg sdfg sdf gdf gsdf dg
dfsgsdfg dsf gsdg ZV fdgsdf
Tehát itt több sort kéne kinyerni belőle. Na most a /m-et hogy használhatom?
Case insensitive
preg_match('/xy(.*)zv/i', $hol, $hova);
Ha engem csak a köztes tartalom érdekelne, inkább így próbálnám:
preg_match('/(?<=xy).+(?=zv)/si', $hol, $hova);
s flag
hiba
delimiter lemaradt...
szerintem az lehetett a hiba oka, hoyg nem raktam határolókat... illetve az aposztrófot használtam... így már feltehetőleg jobb
picinyt megzavart a külső zárójel, belátom, nem tudtam, hogy az is lehet delimiter...