Regexp-ben hogy lehet opcionálissá tenni egy csoportot? Próbáltam a kérdőjellel, de az a baj, hogy összevonta a két csoport értékét.
Ez a kiinduló példa
^parameters#([^\/]+)#([^\/]+)
parameters#p1#p2 esetén okés,de ha csak első paraméter van,akkor az nem oké,azaz úgy is mennie kéne,hogy
parameters#p1
Hogy tehetem meg,hogy a második opcionális legyen?
Próbáldam ? jelet használni a másodiknál,de akkor meg egy csoporba vonta össze az egészet.
^parameters#([^\/]+)(#([^\/]+))?
gondolom ez kell neked
^parameters#([^\/]+)(?:#([^\/]+))?
próbáld ki itt: www.regexr[pont]com
^parameters#([^\/]+)#([^\/]+)? -> elhagyhatom ugyan a p2 értékét,de a #-nek ott kell maradnia
^parameters#([^\/]+)(#([^\/]+))? -> összevonja a két paramétert, ha mindkettő meg van adva,ami nem jó.
Sajna ugyanaz, ha jól értem a ?: az arra jó,hogy ne kreáljon erdemény csoportott,de amúgy hasonlóan viselkedjen.
Lehet valami feltételt is kell kötni hozzá,ahogy a regex doksit nézem.. na ez érdekes lesz:)
pl.: aaa?
aa vagy aaa illik rá. A 3. "a" előfordulása 0x vagy 1x.
aaa* hasonló csak 0x-tól végelenig.
Jó: aa, aaa, aaaa, aaaaaa, aaaaaaaaaaaaaaaaaaaaaaa
aaa+ legalább 1x, tehát a fenti sokféleség közül csak az "aa" nem illik rá.
Minden jel csak is kizárólag a megelőzőre vonatkozik
ab?a tehát jó: aa, aba
Ha egy nagyobb csoportot akarsz befogni
(...)?-t kell alkalmaznod.
[^\/]+ minden olyan karakterre illik ami nem tartalmaz / karaktert. Tehát # is jó. Azaz
^parameters#([^\/]+)#([^\/]+) erre illik: parameters#### és ez is: parameters################################
mert ugyebár csak / karakter tiltott, de minden más végtelenségig mehet.
^parameters#([^\/]+)(#([^\/]+))? tehát a fenti válaszokra illik: parameters################################ szintúgy, mert az első ([^\/]+) lehetővé teszi parameters# önmagában nem jó, mert az első [^\/]+ követel karaktert. parameters## már ok, ahogy ez is jó: parameters#?
Az lenne a legjobb ha specifikálnád a kérdésed, mert így ezt a regexnek nem sok értelmét látom. Főleg, hogy a szeparátor karakter is engedélyezett a paraméterben, ami meg a feldolgozásba add egy kis nehézséget.
Értem és és hasznos is részben,bár amit igazából kerestem és sikerült vele megoldanom,az a feltételes regexp.
Persze be kellett raknom a #-t is a tiltott karakterek közé.
^parameters#([\w][^#]+)(#)?(?(2)([\w][^#]+))
vagy
^parameters#([\w][^#]+)(?=#)(?:#([\w][^#]+))?
csodás:))
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!