Regex egyezés előtti szöveg #2
Sziasztok,
Nemrég meggyűlt a bajon a regex kifejezésekkel: http://weblabor.hu/forumok/temak/131766
Viszont ismét elakadtam vele, ugyanis a kapott minta jó, de rosszul kezeltem.
A lényeg, egy példán:
Egy objektumnak ad bizonyos tulajdonságokat mintaegyezés esetén.
van 2 minta tárolva, egy stringre tehát 2 egyezést fog nézni: benne van-e a valami1, és a valami2. Ha benne van, akkor az előző témában megkapott számokat beállítja a propertybe (legyen a neve prop)
Tehát:
1 x valami1 vagy 2 x valami2 esetén a prop kétszer kapja meg a counter értékét (1 lesz, vagy 2, kitudja, attól függ melyik van előrébb)
2 x valami1 és 2 x valami2 esetén 2 lesz a prop értéke, de 4-nek kéne lenni.
A ((?<counter>(\d+))\s(?:x\s)?)?(valami) mintát kéne valahogy kibővíteni, hogy ha előtte "vagy" vagy " / " vagy "/" található, akkor ne legyen találat.
Így ha valami1 és valami2/valami3 a minta, akkor csak a valami1-re és valami2-re egyezne.
Vagy valami1 vagy valami2 plusz valami3 esetén csak a valami1 és valami3-ra egyezne.
A minták db-ben vannak tárolva, és egy foreach-el végignézi az összessel a szoba nevét.
Erre tudtok megoldást ajánlani? Nekem már kimerült
Köszönöm előre is.
Itt próbálgattam, vannak szép minták is:
https://regex101.com/r/bW7aY3/2
■ Nemrég meggyűlt a bajon a regex kifejezésekkel: http://weblabor.hu/forumok/temak/131766
Viszont ismét elakadtam vele, ugyanis a kapott minta jó, de rosszul kezeltem.
A lényeg, egy példán:
Egy objektumnak ad bizonyos tulajdonságokat mintaegyezés esetén.
van 2 minta tárolva, egy stringre tehát 2 egyezést fog nézni: benne van-e a valami1, és a valami2. Ha benne van, akkor az előző témában megkapott számokat beállítja a propertybe (legyen a neve prop)
Tehát:
1 x valami1 vagy 2 x valami2 esetén a prop kétszer kapja meg a counter értékét (1 lesz, vagy 2, kitudja, attól függ melyik van előrébb)
2 x valami1 és 2 x valami2 esetén 2 lesz a prop értéke, de 4-nek kéne lenni.
A ((?<counter>(\d+))\s(?:x\s)?)?(valami) mintát kéne valahogy kibővíteni, hogy ha előtte "vagy" vagy " / " vagy "/" található, akkor ne legyen találat.
Így ha valami1 és valami2/valami3 a minta, akkor csak a valami1-re és valami2-re egyezne.
Vagy valami1 vagy valami2 plusz valami3 esetén csak a valami1 és valami3-ra egyezne.
A minták db-ben vannak tárolva, és egy foreach-el végignézi az összessel a szoba nevét.
Erre tudtok megoldást ajánlani? Nekem már kimerült
Köszönöm előre is.
Itt próbálgattam, vannak szép minták is:
https://regex101.com/r/bW7aY3/2
Közelít...
(?!.*?(?:\svagy\s|\s\/\s|\/))((?<counter>(\d+))\s(?:x\s)?)?(queen size ágy)
Itt lehet látni a gyakorlatban:
https://regex101.com/r/bW7aY3/3
Update:
Mégse megoldva, csúnyán benéztem.
A linken is látni, hogy a legutolsó queen size-t nem ismeri fel.
Esetleg ötlet valakinek?
írd le konkrétan, hogy miből
amit leírtál azt lusta vagyok értelmezni
ok :)
https://regex101.com/r/bW7aY3/4
Ja igen
((?<counter>(\d+))\s(?:x\s)?)?(valami)
minta...
ezekből a szövegekből mi
sor:
deluxe szoba 1 x king size ágy, 1 x queen size ágy, 1 kétszemélyes ágy
szükséges adat:
...
Legyen a queen size ágy. 1 x
1 x queen size ágy.
Ahogy az előző témában megoldottad :)
Más szemszögből nézve
Itt már érdemes lenne nem a mintát macerálni, hanem a feldolgozást.
Ha megtalálta a patternt, akkor utólag php-val ellernőiztetni, hogy a vagy valamelyik verziója van-e előtte.
A vagyokat meg szintén letárolni valahol.
Reguláris kifejezések
és
ésvagy
mentén újra felosztanám, és programkóddal alkalmaznám a logikát rá.Járható útnak tűnik
És ez persze x nyelven.
Ezekre lennének a regexek db-ben tárolva.
Az ésre úgyanígy megvannak a minták.
Plusz már van egy működő rendszer, amit csak bővíteni szeretnék, nem átírni :)