Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Palecek.x 06. 10. 2018, 10:57:16
-
zdravím vespolek,
pomohl by mi prosím někdo z vás se setavením nebo návodem na sestavení reg. výrazu, který by uměl zpracovat něco takového ?
user_firstname=Vaclav&user_surname=Havel&_user_city=Praha
zkoušel jsem jen tak pro matchnutí prvního přířazení:
^(\w+)=(\w*)
s výsledkem:
Match 1
Full match 0-21 `user_firstname=Vaclav`
Group 1. 0-14 `user_firstname`
Group 2. 15-21 `Vaclav`
nicméně by mě zajímalo (protože nechci spoléhat na to, že vždycky budou tři přiřazení viz query) zda-li regulární výrazy podporují proměnlivý počet toho, co jsem se pokusil sestavit. V tomto případě bych chtěl mít 6 group. A například pokud pribude datum narození tak 8.
jde pls takový regulární sestavit nebo se snažím o něco co není podporované?
-
Co neco takoveho http://codepad.org/71ykiwHs (http://codepad.org/71ykiwHs)?
-
a v akomjazyku to robis ?
Retazec sa da pokrajat cez separator & do pola / funkcia split() /
potom prebehnes vsetky polozky pola a na kazdu aplikujes svoj regex
Napriklad (JavaScript)
var str="user_firstname=Vaclav&user_surname=Havel&_user_city=Praha";
// split the string into array
var arr = str.split("&");
for (k in arr) {
elem = arr[k];
// match regex
match_result=elem.match(/^(\w+)=(\w*)/)
// get results
console.log("Full match : " + match_result[0])
console.log("Group 1 : " + match_result[1])
console.log("Group 2 : " + match_result[2])
console.log("------")
}
-
Vysledky predosleho kodu
Full match : user_firstname=Vaclav
Group 1 : user_firstname
Group 2 : Vaclav
------
Full match : user_surname=Havel
Group 1 : user_surname
Group 2 : Havel
------
Full match : _user_city=Praha
Group 1 : _user_city
Group 2 : Praha
------
-
<?php
$str = "user_firstname=Vaclav&user_surname=Havel&_user_city=Praha";
parse_str($str, $output);
print_r($output);
Výstup:
Array
(
[user_firstname] => Vaclav
[user_surname] => Havel
[_user_city] => Praha
)
-
Co neco takoveho http://codepad.org/71ykiwHs (http://codepad.org/71ykiwHs)?
nebo urllib.parse.parse_qs ze standardní knihovny.
-
a v akomjazyku to robis ?
Retazec sa da pokrajat cez separator & do pola / funkcia split() /
potom prebehnes vsetky polozky pola a na kazdu aplikujes svoj regex
Napriklad (JavaScript)
var str="user_firstname=Vaclav&user_surname=Havel&_user_city=Praha";
// split the string into array
var arr = str.split("&");
for (k in arr) {
elem = arr[k];
// match regex
match_result=elem.match(/^(\w+)=(\w*)/)
// get results
console.log("Full match : " + match_result[0])
console.log("Group 1 : " + match_result[1])
console.log("Group 2 : " + match_result[2])
console.log("------")
}
URLSearchParams funguje ve všech moderních prohlížečích
var params = new URLSearchParams('user_firstname=Vaclav&user_surname=Havel&_user_city=Praha');
for([name, value] of params) {console.log(name, value)}
-
Pokud to nejde přímo pomocí regulárního výrazu, který by byl připravený na proměnný počet parametrů, pak by bylo asi nejlepším řešením to, co máte v JS jako UrlSearchParams.
Píšu klienta pro C# a Javu současně. (2 téměř stejné klienty)
Na to znáte nějaké knihovny?
Ovšem neřeší to otázku, jestli by to šlo přes reg ex?
Díky
-
Pokud to nejde přímo pomocí regulárního výrazu, který by byl připravený na proměnný počet parametrů, pak by bylo asi nejlepším řešením to, co máte v JS jako UrlSearchParams.
Píšu klienta pro C# a Javu současně. (2 téměř stejné klienty)
Na to znáte nějaké knihovny?
Ovšem neřeší to otázku, jestli by to šlo přes reg ex?
Díky
(\w+)\=(\w*)\&?
takový regex by mohl fungovat? Ale v každém jazyku pro to existuje knihovna, která ošetří i dekódování. Podívejte se do dokumentace nebo na stack overflow.
-
Ano, to je odpověď na otázku, jestli to jde pomocí reg. výrazu- JDE - díky.
Teď je výsledkem:
Match 1
Full match 0-22 `user_firstname=Vaclav&`
Group 1. 0-14 `user_firstname`
Group 2. 15-21 `Vaclav`
Match 2
Full match 22-41 `user_surname=Havel&`
Group 1. 22-34 `user_surname`
Group 2. 35-40 `Havel`
Match 3
Full match 41-57 `_user_city=Praha`
Group 1. 41-51 `_user_city`
Group 2. 52-57 `Praha`
-
Co když bude na vstupu tohle?
name=Vaclav%20Havel&_user_city=PrahaNěkde to musíš ještě rozkódovat. Proto je lepší použít knihovnu, která je na to dělaná.
-
Co když bude na vstupu tohle?
name=Vaclav%20Havel&_user_city=PrahaNěkde to musíš ještě rozkódovat. Proto je lepší použít knihovnu, která je na to dělaná.
asi by byl lepší takový výraz
([^=]+)\=([^=&]*)\&?
-
Možná to dělám záhadně, ale mám URL, zavolám URLDecode ze System.Web... a pak vezmu jen query (tzn to, co je za otazníkem, vím co tam firemní systém dává, i když se to může změnit) a až na ni aplikuju regulární výraz.
Když si nějakej Ind vzpomene, že mi tam strčí bůhvíco, tak na to se samozřejmě asi nikdy 100proc nepřipravím.
-
Co když bude na vstupu tohle?
name=Vaclav%20Havel&_user_city=PrahaNěkde to musíš ještě rozkódovat. Proto je lepší použít knihovnu, která je na to dělaná.
asi by byl lepší takový výraz
([^=]+)\=([^=&]*)\&?
Smím se zeptat, odkud jste čerpal? Díky
-
Možná to dělám záhadně, ale mám URL, zavolám URLDecode ze System.Web... a pak vezmu jen query (tzn to, co je za otazníkem, vím co tam firemní systém dává, i když se to může změnit) a až na ni aplikuju regulární výraz.
Když si nějakej Ind vzpomene, že mi tam strčí bůhvíco, tak na to se samozřejmě asi nikdy 100proc nepřipravím.
proč nepoužijete HttpUtility.ParseQueryString? https://stackoverflow.com/a/11956978
-
Možná to dělám záhadně, ale mám URL, zavolám URLDecode ze System.Web... a pak vezmu jen query (tzn to, co je za otazníkem, vím co tam firemní systém dává, i když se to může změnit) a až na ni aplikuju regulární výraz.
Když si nějakej Ind vzpomene, že mi tam strčí bůhvíco, tak na to se samozřejmě asi nikdy 100proc nepřipravím.
proč nepoužijete HttpUtility.ParseQueryString? https://stackoverflow.com/a/11956978
protoze se mi to nepodarilo vygooglovat. Diky
-
Možná to dělám záhadně, ale mám URL, zavolám URLDecode ze System.Web... a pak vezmu jen query (tzn to, co je za otazníkem, vím co tam firemní systém dává, i když se to může změnit) a až na ni aplikuju regulární výraz.
Když si nějakej Ind vzpomene, že mi tam strčí bůhvíco, tak na to se samozřejmě asi nikdy 100proc nepřipravím.
proč nepoužijete HttpUtility.ParseQueryString? https://stackoverflow.com/a/11956978
a tady se to resi pro javu:
https://stackoverflow.com/questions/13592236/parse-a-uri-string-into-name-value-collection/13592324 (https://stackoverflow.com/questions/13592236/parse-a-uri-string-into-name-value-collection/13592324)