ugrás a tartalomhoz

elore meghatarozott karakterekkel elhatarolt szoveg(ek) kinyerese regexp-el

gazember · 2008. Feb. 29. (P), 11.16
Sziasztok.
Erdekelne, hogy mit szoltok, hogyan tudnam megoldani a kovetkezo problemat:
egy szovegben talalhato akarhany elore nem ismert, html kodot es barmilyen
mas karaktert is tartalmazo szoveg, ami { es } koze van hatarolva. Ezt kellene
behelyetesiteni egy masik, elore meghatarozott szoveggel (egy hiperhivatkozassal).
Erre kellene egy kis segitseg.
Valaki tudna segiteni?
Koszi elore is.
 
1

őő talán

DsA · 2008. Feb. 29. (P), 11.28
talán van ötletem, nem biztos h 100%-ig jo mert nem probáltam de pl ez:
preg_replace("/\{es\}(.*?)+\{\/es\}/is","---- cserélt string ----", $str);
na msot amit írtál abbol erre jutottam.... kicsit pontosabban megkéne fogalmaznod hogy na mégis milyen karakterekre, szóhatárokra stb illeszkedjen de ennyi infobol ezt tudtam kihozni.
Viszont ez amit msot írtam, ez ezeket a szavakat cseréli:
{es}asdas{/es}
a második {es} nél a per azért kell h megkell határozni hogy hol van a határoló vége..
tehát itt egy példa:

<?php
	$str = " asdasdsd {es}qwewwqeqw{/es}asdasdsadasdasd{es}vbbvnbvnbvnbv{/es} asdasd";

	$str = preg_replace("/\{es\}(.*?)+\{\/es\}/is","---- cserélt string ----", $str);

	echo $str;
?>
2

Bővebben

vbence · 2008. Feb. 29. (P), 11.29
Van több ilyen kiemelt szövegrészed. Mindegyiket ugyanarra kell kicserélni? Esetleg van egy tömbben ugyanilyen számú cserestring és ezzel megegyező sorrendben kell őket cserélgetni?

A normál szövegben nem szerepel (nem-speciális jelentéssel) a { és } karakter?

(Egy példa nem ártana)
3

valoban

DsA · 2008. Feb. 29. (P), 11.35
valoban.. elég gyér info..
4

pelda

gazember · 2008. Feb. 29. (P), 11.46
Sziasztok.
Bocs, hogy ennyire gyeren fogalmaztam :(

Ime egy pelda:

Celszoveg elotti resz. {<span>Celszoveg</span> kezdete, tartalma - folytatasa;
stb. } innen megint folytatodik fovabb a pelda szoveg....


nos a fentebbi szovegbe a { es } kozti szoveget kellene kicserelni egy hasonlora:
A tovabbiak elolvasasa erdekebe kerem <a href="./registration.html">regisztraljon</a>.


Koszi elore is, es bocsi:)
7

Cache

vbence · 2008. Feb. 29. (P), 12.24
Jobban jársz, ha egy plusz adatbázis mezőben letárolnád a "butított" változatot, nem minden egyes lekéréskor regex-elnél kitudja mekkora szövegeken.
5

megoldas

gazember · 2008. Feb. 29. (P), 12.13
Koszbe sikerult DsA valasza alapjan osszeallitani a megoldast:

<?php
$pat="/\{(.*?)+\\}/is";
$r_text=preg_replace($pat, $replace, $text);
?>
Koszi a segitseget!
6

szivesen

DsA · 2008. Feb. 29. (P), 12.18
szivesen, de amugy ha teheted a
.*? helyett inkább használj:
\w-t vagy \d-t vagy \s vagy épp ami kell sokkal pontosabban meglehet fogalmazni vele, hogy milyen karakterekre, szövegre illeszkedjen, és minnél pontosabban meghatározod annál kevesebb a hiba lehetőség
8

* kvantor

gex · 2008. Feb. 29. (P), 12.49
a .*? semmivel sem jelent többet, mint a .*, mivel a * kvantor a semmire is illeszkedik. a te megfogalmazásodban valami (.) nullaszor vagy többször (*) és ez vagy legyen vagy ne (?). ebből az utolsó rész felesleges.

vagy én tudok rosszul valamit?
9

non-greedy

vbence · 2008. Feb. 29. (P), 12.51
A .*? a nem-kapzsi illesztés, ez csak addig illeszt, amég a következő kifejezés igaz nem lesz.
10

ohh

gex · 2008. Feb. 29. (P), 13.37
köszi az infot, már érdemes volt felkelnem. :) nem is tudtam, hogy a * mohóságát csillapítani lehet a ? lustaságával. :D