Musím analyzovať niektoré požiadavky HTTP a teraz chcem analyzovať parametre GET.
Môj súčasný regex je
(GET|POST)s(.*)(?.*)sHTTP/(d.d)
Chcem odpovedať nasledujúcim:
"GET /page.html HTTP/1.1"
=> group1: "GET" group2: "/page.html" group3: "" group4: "1.1"
"GET /page.html?param1=foo¶m2=bar HTTP/1.1"
=> group1: "GET" group2: "/page.html" group3: "param1=foo¶m2=bar" group4: "1.1"
Môj aktuálny regex sa zhoduje len s druhým
odpovede:
2 pre odpoveď č. 1Zabaliť tretiu zachytávaciu skupinu s voliteľnou skupinou, ktorá nie je zachytená, a použiť lenivú *?
kvantifikátor v rámci druhej zachytávacej skupiny, aby sa zhodoval čo najmenej znakov v skupine 2 (pre skupinu 3, ktorá zodpovedá parametrom dopytu, aby sa tieto údaje zachytili, ak sú prítomné):
(GET|POST)s(.*?)(?:(?.*)s)?HTTP/(d.d)
^ ^^^^^^^^^^^^^
podrobnosti:
(GET|POST)
- skupina 1: buďGET
aleboPOST
substringss
- medzery(.*?)
- Skupina 2: akékoľvek 0+ znaky, čo najmenej (tak, aby sa všetky parametre v reťazci dopytu dostali do nasledujúcej zachytávacej skupiny, ak je prítomný reťazec dopytu)(?:(?.*)s)?
- voliteľné (1 alebo 0-krát) nezhodujúce sa skupiny:(?.*)
- skupina 3 zachytávajúca a?
, akékoľvek 0+ znakov čo najviac, až do posledného ...s
witespace
HTTP/
- aHTTP/
literálna sekvencia znakov(d.d)
- skupina 4 zachytávajúca číslicu,.
a číslice.
Pozrite si regex demo.
Teraz, ak nie ?
skupina 3 nezachytí nič, čo je povinné ?
a s
sú nepovinné ako súčasť sekvencie.