ugrás a tartalomhoz

Regex egyezés előtti szöveg #2

csabessz47 · 2015. Feb. 12. (Cs), 13.05
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
 
1

Közelít...

csabessz47 · 2015. Feb. 12. (Cs), 14.52
Stackoverflow egyik témájának majdnem az utolsó sora segített:
(?!.*?(?:\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?
2

írd le konkrétan, hogy miből

szabo.b.gabor · 2015. Feb. 12. (Cs), 15.01
írd le konkrétan, hogy miből mit akarsz, milyen logika alapján (:

amit leírtál azt lusta vagyok értelmezni
3

ok :)

csabessz47 · 2015. Feb. 12. (Cs), 15.08
Egy szöveget felismerni, ha előtte nem "vagy" " / " "/" van.
https://regex101.com/r/bW7aY3/4
6

Ja igen

csabessz47 · 2015. Feb. 12. (Cs), 15.43
Úgy, hogy e feltétel mögött legyen az előző témában megkapott
((?<counter>(\d+))\s(?:x\s)?)?(valami)
minta...
7

ezekből a szövegekből mi

szabo.b.gabor · 2015. Feb. 12. (Cs), 15.51
ezekből a szövegekből mi kellene?

sor:
deluxe szoba 1 x king size ágy, 1 x queen size ágy, 1 kétszemélyes ágy

szükséges adat:
...
8

Legyen a queen size ágy. 1 x

csabessz47 · 2015. Feb. 12. (Cs), 16.04
Legyen a queen size ágy.
1 x queen size ágy.
Ahogy az előző témában megoldottad :)
9

Más szemszögből nézve

csabessz47 · 2015. Feb. 12. (Cs), 16.55
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.
4

Reguláris kifejezések

Poetro · 2015. Feb. 12. (Cs), 15.23
Nem lehet, hogy ezt a problémát nem reguláris kifejezéssel kellene megoldani? Például én feldarabolnám a szöveget, majd és és vagy mentén újra felosztanám, és programkóddal alkalmaznám a logikát rá.
5

Járható útnak tűnik

csabessz47 · 2015. Feb. 12. (Cs), 15.28
Viszont az a vagy lehet / jel szóközökkel és anélkül, vagy szó szerint hogy "vagy".
É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 :)