ugrás a tartalomhoz

Regex kérdés

therest · 2013. Nov. 26. (K), 17.38
Adott egy css dokumentum amiben random pozícióban vannak a lentiekhez hasonló sorok

id1:id2:tetszőleges karakter sorozat
és
id1:tetszőleges karater sorozat

Az "id1"-et és "id2"-t kell helyettesíteni session változókban levő értékekkel.
Mi lenne itt az elegáns megoldás, hogy ne kelljen kétszer is végig szaladni a dokumentumon (id2 aztán id1 replace)?

Nem vagyok sajnos egy regex mágus, gondolom lehet írni rá egy csinos mintaillesztést.

Köszi a segítséget.
 
1

Nem próbáltam ki

Poetro · 2013. Nov. 26. (K), 17.49
/(\w+):(?:(\w+):)?(\w+)/
Nem próbáltam ki. A lényeg, hogy keresünk szöveget, amit egy : követ, majd ezt opcionálisan mégegyszer, majd még a maradék szöveget.
3

Köszi , elgondolkodok rajta

therest · 2013. Nov. 26. (K), 17.59
Köszi , elgondolkodok rajta miért is így kell.
Nem akarok pofátlan lenni, de egy preg_replace esetén hogyan nézne ki a teljes hívás, ha $x, és $y változó tárolja az "id1" és "id2" helyére behelyettesítendő értékeket? Megoldható egyáltalán preg_replace-el?

Tehát mondjuk:
$x="stop";
$y="/start";

Sorok a css fileban:
background-image:url(id1:id2:/images/bikkmakk.png);
background-image:url(id1:/images/bikkmakk.png);

És ezt szeretném kapni:
background-image:url(stop/start/images/bikkmakk.png);
background-image:url(stop/images/bikkmakk.png);

Sajna elég ritkán kell regexhez nyúlnom, és emiatt minden alkalommal szívok vele.
5

Nem tudom

Poetro · 2013. Nov. 26. (K), 18.10
Nem használtam nagyon régóta PHP-t, de szerintem inkább preg_replace_callback kell neked. Ráadásul pár perc alatt ki is tudod próbálni.
10

Miért kell ehhez regex? Ez

tgr · 2013. Nov. 27. (Sze), 16.01
Miért kell ehhez regex? Ez egy sima substring behelyettesítés.
2

Legelegánsabb

Hidvégi Gábor · 2013. Nov. 26. (K), 17.53
Érdemes regexmágussá válnod, mert sok helyen lehet használni, és nagyon hasznos. Csak az elején tűnik bonyolultnak, ha rászánsz pár órát, meg fogod érteni.
4

A nagyon alap dolgokkal

therest · 2013. Nov. 26. (K), 18.04
A nagyon alap dolgokkal elboldogulok, komplexebbekkel meg nem olyan sűrűn hoz össze a sors. Ami eléggé lelomboz, hogy olyan környezetben melózom, ahol elég sok programozási nyelv játszik, és köztük nem mind használ teljesen azonos szintaktikát a mintaillesztésre. Aztán meg gondolkodhatsz, hogy csak a nyitó karakter nem az minek lennie kéne, vagy fundamentálisan rontottál el valamit.
6

Mind másik

Pepita · 2013. Nov. 26. (K), 22.35
köztük nem mind használ teljesen azonos szintaktikát a mintaillesztésre
Én még nem láttam két teljesen egyformát... :)

Ha nem megy egy replace-el, csináld kettővel, és mindig amennyire lehet, cache-elj, hogy ne kelljen ugyanazt sokszor legyártani.

Bár igazából nem nagyon értem, hogy PHP-ból miért is kell CSS-t átírni. Ott már valami baj van szerintem.

Másrészt mivel a keresőknek majdnem mindegy a kinézet, csak a Júzernek számít, ezt meglépheted kliensoldali js-el is, hogy adott azonosítójú elemekre ráakasztod a másik azonosítójú CSS cuccost. Pl. sQuery-vel. Persze nem mindegy, hány ilyen van, de lévén id-kről szó, felteszem, hogy nem sok.
7

Egy skin-ezési rendszeren

therest · 2013. Nov. 27. (Sze), 10.40
Egy skin-ezési rendszeren dolgozom (1 php motor, sok 3rd party layout, és médiatartalom), és a az egyes skinek-ben más és más médiatartalmakat akarok használni, ráadásul egy fallback rendszerrel (ha az egyik skin médiatartalmában nem található egy fájl akkor használjon egy defaultot).
Mindemellett más paraméterek is beleszólnak.
A későbbiekben majd talán valami c#-ban írt toolal fogom előre kigenerálni a css-ek nagy részét, de jelen pillanatban kell valami ami tényleg dinamikusan módosítja a képek elérési útvonalát.


Bár igazából nem nagyon értem, hogy PHP-ból miért is kell CSS-t átírni. Ott már valami baj van szerintem.


A fentiek fényében mi jöhetne szóba egy ilyen rendszernél?
8

Hát...

Pepita · 2013. Nov. 27. (Sze), 11.59
Az az igazság, hogy ennyi infó alapján a rendszer torka véres...
1 php motor, sok 3rd party layout, és médiatartalom

Nemigazán látom át ennyiből a működést, de nem lehet úgy megoldani a problémát, hogy (és / vagy):
  • Minden megjelenítésnek teljes a CSS-e (minden médiatípushoz)
  • Ha egy adott médiatartalom nem létezik (akár CSS-ből hivatkozol rá, akár HTML-ből), az eleve rossz megközelítés, legalábbis CSS esetében (pl. háttérkép), az mindig legyen meg, HTML esetén (pl. img tag) egy egyszerű (CSS) háttérképpel tudod helyettesíteni
  • Default tartalmat inkább HTML-t kéne előállítani PHP-ból

Azt nem egészen értem, hogy a CSS-ben levő képek miért nem a te szervereden vannak a CSS-el együtt. OK, 3rd party layout, de ettől még nem kell neki máshol laknia...

Szerintem az jöhet szóba, hogy jól átnézed és kijavítod a skineket, magadnál tartod, és csak a helyes skin kiválasztását oldod meg PHP-ból, a skinek fájljai kvázi statikusak. (Persze ha pl. arra van szükség, hogy xy tartalom háttérképe naponta más legyen, akkor pedig a css-ben hivatkozott fájl helyére másolsz naponta másikat.)
9

A 3rd party tartalmak a saját

therest · 2013. Nov. 27. (Sze), 13.23
A 3rd party tartalmak a saját szerveremen vannak.
Ami miatt problémás, hogy elég gyorsan cserélődnek a médiatartalmak, ráadásul van ahol képi szinten van lokalizált (nyelvi/területi) tartalom.

Írok egy példát: van egy általános angol nyelvű media set, tartalmaz minden általános elemet ami az átlag US/UK/CAN/AUS usernek kell. Van benne egy default image ami azt mondja hogy "Visit our office!"
Azonban pár elem eltér országonként mert az ottani office hivatkozni akar a konkrét helyre. Mondjuk a banner azt mondja, hogy "Visit our office in New York!".
De nem minden ország akar ilyet, hanem mondjuk csak (html)szövegben akar eltérni.

Persze mindemellett vannak specifikus js, css, html, json fileok is néha. Itt a hangsúly a néhán van, a nagy része teljesen megegyező a sitenak minden 3rd party esetén. És persze kell css/js merge...

Ha ehhez hozzáadod a nyelvi kérdéseket (mondjuk Kanadában francia+angol), és azt hogy a bontás sokkal kisebb egységekben történik mint ország, elég nagy a variációk száma.

Mivel amolyan egy emberes hadseregként küzdök ezzel a komplexebb feladattal az hogy fejlesszek és mellett tartalmat(css/média) is menedzseljek kizárt. Ezért tűnik nekem jobbnak kódból megoldani az elérési útvonalak kikalkulálását és a fallbacket.

Persze ez elvesz az oldal sebességéből így az sem kizárt - régebben már írtam itt ezzel kapcsolatban talán - hogy a vége egy apache modul lesz, ami a kérések, és a fájlrendszer feltérképezése (meg némi cache) alapján rout-ol.
11

Így érthetőbb

Pepita · 2013. Nov. 27. (Sze), 22.38
Egy dolog kicsit nem tetszik:
default image ami azt mondja hogy "Visit our office!"
Hol a szemantikus web? Miért kép "mondja"? Ha szöveg mondaná, könnyebben is kezelnéd. Ha meg mindenképp képként kell, akkor lehet, hogy azzal jársz a legjobban, hogy a képet gyártod és cache-eled, PHP-ból szolgálod ki a CSS vagy HTML hivatkozását. Arra való a cache, hogy megtehess aránylag "büntetlenül" ilyet is.

Ha erre külön Apache-modult írsz, egy cikk formájában érdekelne, valószínű akkor érteném egész pontosan, de így is "kapisgálom" már.
12

Sokszor olyan igényei vannak

therest · 2013. Nov. 29. (P), 12.57
Sokszor olyan igényei vannak az adott partnernek, hogy legyen egy 3d-s szöveg, fűvel textúrázva, rajta három pávaszem. És ezt a típust sosem győzöd meg a letisztult felületekről, vagy a keresőoptimalizálás fontosságáról.
Sokszor pedig nem is szövegről van szó, csak egyéb kép elemekről, egyik mondjuk keresztény és galambot akar rá, a másik meg hindu, és tehenet, de mindkettőnek bejön a felhők közül kitörő volumetrikus fény (mint default).

Ha kitart addig a projekt, hogy neki tudok állni a modulnak, akkor ígérem beszámolok szenvedéseimről. :)
13

Az jó lesz

Pepita · 2013. Nov. 29. (P), 17.30
Ha kitart addig a projekt, hogy neki tudok állni a modulnak, akkor ígérem beszámolok szenvedéseimről. :)
Te is tarts ki...