Regex egyezés előtti szöveg - MEGOLDVA
Sziasztok,
Regex kifejezésekkel elakadtam, és sajnos rákeresni sem nagyon tudok a problémára, habár már órákat vacakoltam vele.
Remélem itt a rókák közül tud segíteni valaki.
A teszt szöveg:
Ebből kéne kinyernem, hogy hányszor van a valami egy sorban (egyszerre mindig csak 1 sort kell majd vizsgálni, ez tartalmazza az összes esetet).
Az első 2 variációra megvan a megoldás:Viszont a 3. esetben (amikor nincs szám) 1-et kéne alkalmazni.
De már az is nagy segítség lenne, ha lenne olyan minta, ami csak az utolsó 2 sorra egyezik. Negatív lookeaheaddel próbálkoztam, de nem sok sikerrel, ez rátalál az összes sorra:Van ötletetek, hogy hogyan lehetne megoldani?
Köszönöm előre is
Itt lehet látni színezgetve:
https://regex101.com/r/hD2hS0/3
■ Regex kifejezésekkel elakadtam, és sajnos rákeresni sem nagyon tudok a problémára, habár már órákat vacakoltam vele.
Remélem itt a rókák közül tud segíteni valaki.
A teszt szöveg:
5 valami
55 valami
szöveg 5 valami szöveg
5 x valami
55 x valami
szöveg 5 x valami szöveg
valami
szöveg valami
55 valami
szöveg 5 valami szöveg
5 x valami
55 x valami
szöveg 5 x valami szöveg
valami
szöveg valami
Ebből kéne kinyernem, hogy hányszor van a valami egy sorban (egyszerre mindig csak 1 sort kell majd vizsgálni, ez tartalmazza az összes esetet).
Az első 2 variációra megvan a megoldás:
((?<counter>(\d+)) (|x ))valami
De már az is nagy segítség lenne, ha lenne olyan minta, ami csak az utolsó 2 sorra egyezik. Negatív lookeaheaddel próbálkoztam, de nem sok sikerrel, ez rátalál az összes sorra:
(?!(\d+) (|x ))valami
Köszönöm előre is
Itt lehet látni színezgetve:
https://regex101.com/r/hD2hS0/3
Első megoldás
Ezzel sikerült:
Ha tudtok esetleg egy univerzálisabb megoldást, kérlek ne tartsátok magatokban.
Érdemes átnézni a php
Igen
Aztán ahol nincs érték de van egyezés, akkor majd utólag 1-et rakok be.
Az egésznek a lényege, hogy db-ből az összes mintával megnéz egy stringet, és az egyezések alapján tulajdonságokat ad egy objektumnak.
Tehát a különbség aközött, hogy a számot 1 mintával kitalálja, és hogy a meglévő számos minta mellé felveszek egy újat ami CSAK a szám nélkülire illeszkedik a végeredménynél nem számít.
Ezért próbáltam úgy fogalmazni, hogy mindkettő megoldás jó lenne, de sajnos magamtól egyik sem ment.
((\d+)\s+(?:x\s+)?)?(valami)
Ez tetszik
Kicsit szigorítani kell rajta, meg a számot elkapni mondjuk egy counterbe.
Aztán ha nincs counter akkor php majd 1-et pótol be utólag :)
((?<counter>(\d+))\s(?:x\s)?)?valami
Köszönöm.
szívesen