Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: FKoudelka 20. 01. 2023, 14:44:15
-
Zdravím,
mořím se s tím půl dne, poradíte prosím někdo ?
jak bych napsal regex na odchytnuti napr. 361854EA825E3802
Velka písmena i cisla (oboje) Fixni delka 16 jako cele slovo
[A-Z0-9]{16} …. Tohle dává i 16 cisel nebo 16 pismen
Zkousim i toto, ale nefunguje
([A-Z]+[0-9]+|[0-9]+[A-Z]+){16}
Dik moc
-
Tohle dává i 16 cisel nebo 16 pismen
A kde je problem?
-
Tohle dává i 16 cisel nebo 16 pismen
A kde je problem?
Potřebuju mix
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
-
echo -e '361854EA825E3802\n1234567890123456\nABCDEFGHIJKLMOPQ\n' | grep -P '(?=[0-9A-Z]{16})(?=.*[A-Z].*)(?=.*[0-9].*)
ale je to rozsireny perlovsky regexp
marek
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
No to {16} tam určitě musí být, aby to odpovídalo přesně 16 znakům.
Třeba tohle by mělo fungovat, tam kde se používá PCRE: ^(?![0-9]{16})(?![A-F]{16})[0-9A-Z]{16}$
-
Samozřejmě tam místo [A-F] má být [A-Z], nějak jsem se přepnul na představu, že tam mají být jen hexadecimální číslice :)
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
No to {16} tam určitě musí být, aby to odpovídalo přesně 16 znakům.
Třeba tohle by mělo fungovat, tam kde se používá PCRE: ^(?![0-9]{16})(?![A-F]{16})[0-9A-Z]{16}$
dik moc
já nevím , to by asi znamenalo 16cisel AND 16pismen AND 16znaku , ne ?
proc to ?! a ne ?=
som z toho volaaký zmätený
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
No to {16} tam určitě musí být, aby to odpovídalo přesně 16 znakům.
Třeba tohle by mělo fungovat, tam kde se používá PCRE: ^(?![0-9]{16})(?![A-F]{16})[0-9A-Z]{16}$
dik moc
já nevím , to by asi znamenalo 16cisel AND 16pismen AND 16znaku , ne ?
proc to ?! a ne ?=
som z toho volaaký zmätený
dává to 16+ znaků
-
treba tie vysledky potom prefiltrovat, zbytocne riesit vsetko regexom
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
No to {16} tam určitě musí být, aby to odpovídalo přesně 16 znakům.
Třeba tohle by mělo fungovat, tam kde se používá PCRE: ^(?![0-9]{16})(?![A-F]{16})[0-9A-Z]{16}$
dik moc
já nevím , to by asi znamenalo 16cisel AND 16pismen AND 16znaku , ne ?
proc to ?! a ne ?=
som z toho volaaký zmätený
Ne, vyzkoušejte si to, třeba online na https://regex101.com Akceptuje to text, který je dlouhý právě 16 znaků a skládá se jen z číslic nebo velkých písmen, a zároveň to nejsou jenom číslice nebo jenom písmena (neboli musí tam být písmena i číslice).
(?!…) je tzv. negativní vyhlížení – tj. kurzor jakoby zůstane na místě, ale podívá se dopředu, zda je tam to, co odpovídá výrazu v závorce. U pozitivního vyhlížení by to bylo splněné tehdy, když tam takový text je, u negativního je podmínka splněná, když tam takový text není. Tj. (?![0-9]{16}) se podívá dopředu, zda tam není 16 číslic – když je, tak tahle část nevyhoví. Další skupina se podívá, zda tam není 16 písmen. Když je tam jen šestnáct písmen, tak výraz nevyhoví. A pak se teprve začne kurzor posouvat a 16krát porovná, zda je daný znak číslice nebo písmeno. Když ano, narazí na $, takže už jen zkontroluje, zda je na konci vstupu.
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
No to {16} tam určitě musí být, aby to odpovídalo přesně 16 znakům.
Třeba tohle by mělo fungovat, tam kde se používá PCRE: ^(?![0-9]{16})(?![A-F]{16})[0-9A-Z]{16}$
dik moc
já nevím , to by asi znamenalo 16cisel AND 16pismen AND 16znaku , ne ?
proc to ?! a ne ?=
som z toho volaaký zmätený
Ne, vyzkoušejte si to, třeba online na https://regex101.com Akceptuje to text, který je dlouhý právě 16 znaků a skládá se jen z číslic nebo velkých písmen, a zároveň to nejsou jenom číslice nebo jenom písmena (neboli musí tam být písmena i číslice).
(?!…) je tzv. negativní vyhlížení – tj. kurzor jakoby zůstane na místě, ale podívá se dopředu, zda je tam to, co odpovídá výrazu v závorce. U pozitivního vyhlížení by to bylo splněné tehdy, když tam takový text je, u negativního je podmínka splněná, když tam takový text není. Tj. (?![0-9]{16}) se podívá dopředu, zda tam není 16 číslic – když je, tak tahle část nevyhoví. Další skupina se podívá, zda tam není 16 písmen. Když je tam jen šestnáct písmen, tak výraz nevyhoví. A pak se teprve začne kurzor posouvat a 16krát porovná, zda je daný znak číslice nebo písmeno. Když ano, narazí na $, takže už jen zkontroluje, zda je na konci vstupu.
super, diky za vysvetleni. regex101 jsem zkousel, ale davalo to 16+. zkuste 361854EA825E3802111 chcete-li
-
super, diky za vysvetleni. regex101 jsem zkousel, ale davalo to 16+. zkuste 361854EA825E3802111 chcete-li
Mně na tenhle vstup regex101.com hlásí, že zadanému regulárnímu výrazu neodpovídá. Teprve když odmažu ty tři jedničky na konci, vstup odpovídá.
-
Pokud regexp engine, který používáte, podporuje vyhlížení (https://www.root.cz/clanky/regularni-vyrazy-7/), můžete nejprve zkontrolovat, že vstup nejsou jen číslice nebo jen písmena, a pak teprve použít vaši kontrolu. Pokud to nepodporuje, budete si to muset ošetřit přímo v aplikaci, tj. udělat ty testy za sebou dva nebo tři (podle toho, zda „jenom písmena“ a „jenom číslice“ otestujete v jednom nebo dvou krocích).
Dik, zkoušel jsem i toto, /^(?=.*?\d)(?=.*?[A-Z])[A-Z\d]+$/
ale dosud všechny moje pokusy skončily na tom {16}
No to {16} tam určitě musí být, aby to odpovídalo přesně 16 znakům.
Třeba tohle by mělo fungovat, tam kde se používá PCRE: ^(?![0-9]{16})(?![A-F]{16})[0-9A-Z]{16}$
dik moc
já nevím , to by asi znamenalo 16cisel AND 16pismen AND 16znaku , ne ?
proc to ?! a ne ?=
som z toho volaaký zmätený
Ne, vyzkoušejte si to, třeba online na https://regex101.com Akceptuje to text, který je dlouhý právě 16 znaků a skládá se jen z číslic nebo velkých písmen, a zároveň to nejsou jenom číslice nebo jenom písmena (neboli musí tam být písmena i číslice).
(?!…) je tzv. negativní vyhlížení – tj. kurzor jakoby zůstane na místě, ale podívá se dopředu, zda je tam to, co odpovídá výrazu v závorce. U pozitivního vyhlížení by to bylo splněné tehdy, když tam takový text je, u negativního je podmínka splněná, když tam takový text není. Tj. (?![0-9]{16}) se podívá dopředu, zda tam není 16 číslic – když je, tak tahle část nevyhoví. Další skupina se podívá, zda tam není 16 písmen. Když je tam jen šestnáct písmen, tak výraz nevyhoví. A pak se teprve začne kurzor posouvat a 16krát porovná, zda je daný znak číslice nebo písmeno. Když ano, narazí na $, takže už jen zkontroluje, zda je na konci vstupu.
Mate pravdu , nedal jsem tam ^ $
funguje to, dik moc, jeste musim vyresit okoli toho “slova”
-
a zde je vysledek:
/\b(?![0-9]{16})(?![A-Z]{16})[0-9A-Z]{16}\b/gm
Diky vsem a jmenovite FJ.
-
a zde je vysledek:
/\b(?![0-9]{16})(?![A-Z]{16})[0-9A-Z]{16}\b/gm
Diky vsem a jmenovite FJ.
To je fakt humus :-( , neni na to nekde AI generátor ?
-
Můžete zkusit [url https://chat.openai.com/chat]ChatGPT[/url].
Vytvoř regulární výraz (PCRE kompatibilní), který bude odpovídat přesně 16 znakům - velkým písmenům nebo číslicím. V textu však musí být písmena i číslice, posloupnost 16 znaků nebo 16 písmen regulárnímu výrazu nevyhoví.
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
Má to jenom jednu drobnou vadu – ten RE navržený ChatGPT je blbě 8) Ale ve skutečnosti je problém v tom, že ChatGPT používá Markdown, takže hvězdičky interpretoval ve výstupu jako kurzívu. Po chvilce dohadování RE po částech vysvětlil, a tam už jsou hvězdičky vidět:
Tady je upravený regulární výraz, který bude odpovídat řetězci s přesně 16 znaky, který obsahuje alespoň jedno velké písmeno a jednu číslice:
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
(?=.*[A-Z]) znamená, že musí existovat alespoň jedno velké písmeno v řetězci
(?=.*[0-9]) znamená, že musí existovat alespoň jedna číslice v řetězci
[A-Z0-9]{16} znamená, že řetězec musí obsahovat přesně 16 znaků, které mohou být velkými písmeny nebo čísly.
Správný RE, když doplním ty Markdownem ztracené hvězdičky, tedy je:
^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{16}$
A to je (také) správně.
Odpověď ChatGPT na upozornění, že mu kvůli Markdownu vypadly hvězdičky:
Je mi líto, že jsem to nezkontroloval. Zde je opravený výraz:
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
Tj. znovu kurzíva.
Myslím, že některé diskuse se zdejšími trolly se ukážou jako výborná škola komunikace s umělou inteligencí ;)
Ale jinak je to zajímavé řešení toho RE, to mne nenapadlo. Akorát je potřeba vyluštit tu hádanku s Markdownem…
-
ChatGPT je lito vse, co mu budete rozporovat, viz priloha, takze bych na to uplne nespolehal.
-
ChatGPT je lito vse, co mu budete rozporovat, viz priloha, takze bych na to uplne nespolehal.
Já vím. A je to pěkný baron Prášil, co neví, to si vymyslí. Klidně si vymyslí paragraf zákona a ještě vám ho odcituje. Nebo když jsem zkoušel vygenerovat nějaký kód, pro klíčovou část – podstatu toho, co jsem chtěl – použil externí knihovnu. Mělo to jednu drobnou vadu – taková knihovna neexistuje.
-
ChatGPT je lito vse, co mu budete rozporovat, viz priloha, takze bych na to uplne nespolehal.
Já vím. A je to pěkný baron Prášil, co neví, to si vymyslí. Klidně si vymyslí paragraf zákona a ještě vám ho odcituje. Nebo když jsem zkoušel vygenerovat nějaký kód, pro klíčovou část – podstatu toho, co jsem chtěl – použil externí knihovnu. Mělo to jednu drobnou vadu – taková knihovna neexistuje.
Třeba by ji dokázal dodat :-)
-
Můžete zkusit [url https://chat.openai.com/chat]ChatGPT[/url].
Vytvoř regulární výraz (PCRE kompatibilní), který bude odpovídat přesně 16 znakům - velkým písmenům nebo číslicím. V textu však musí být písmena i číslice, posloupnost 16 znaků nebo 16 písmen regulárnímu výrazu nevyhoví.
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
Má to jenom jednu drobnou vadu – ten RE navržený ChatGPT je blbě 8) Ale ve skutečnosti je problém v tom, že ChatGPT používá Markdown, takže hvězdičky interpretoval ve výstupu jako kurzívu. Po chvilce dohadování RE po částech vysvětlil, a tam už jsou hvězdičky vidět:
Tady je upravený regulární výraz, který bude odpovídat řetězci s přesně 16 znaky, který obsahuje alespoň jedno velké písmeno a jednu číslice:
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
(?=.*[A-Z]) znamená, že musí existovat alespoň jedno velké písmeno v řetězci
(?=.*[0-9]) znamená, že musí existovat alespoň jedna číslice v řetězci
[A-Z0-9]{16} znamená, že řetězec musí obsahovat přesně 16 znaků, které mohou být velkými písmeny nebo čísly.
Správný RE, když doplním ty Markdownem ztracené hvězdičky, tedy je:
^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{16}$
A to je (také) správně.
Odpověď ChatGPT na upozornění, že mu kvůli Markdownu vypadly hvězdičky:
Je mi líto, že jsem to nezkontroloval. Zde je opravený výraz:
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
Tj. znovu kurzíva.
Myslím, že některé diskuse se zdejšími trolly se ukážou jako výborná škola komunikace s umělou inteligencí ;)
Ale jinak je to zajímavé řešení toho RE, to mne nenapadlo. Akorát je potřeba vyluštit tu hádanku s Markdownem…
Hehe, vy jste teda hračička :-)
-
Můžete zkusit [url https://chat.openai.com/chat]ChatGPT[/url].
Vytvoř regulární výraz (PCRE kompatibilní), který bude odpovídat přesně 16 znakům - velkým písmenům nebo číslicím. V textu však musí být písmena i číslice, posloupnost 16 znaků nebo 16 písmen regulárnímu výrazu nevyhoví.
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
Má to jenom jednu drobnou vadu – ten RE navržený ChatGPT je blbě 8) Ale ve skutečnosti je problém v tom, že ChatGPT používá Markdown, takže hvězdičky interpretoval ve výstupu jako kurzívu. Po chvilce dohadování RE po částech vysvětlil, a tam už jsou hvězdičky vidět:
Tady je upravený regulární výraz, který bude odpovídat řetězci s přesně 16 znaky, který obsahuje alespoň jedno velké písmeno a jednu číslice:
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
(?=.*[A-Z]) znamená, že musí existovat alespoň jedno velké písmeno v řetězci
(?=.*[0-9]) znamená, že musí existovat alespoň jedna číslice v řetězci
[A-Z0-9]{16} znamená, že řetězec musí obsahovat přesně 16 znaků, které mohou být velkými písmeny nebo čísly.
Správný RE, když doplním ty Markdownem ztracené hvězdičky, tedy je:
^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{16}$
A to je (také) správně.
Odpověď ChatGPT na upozornění, že mu kvůli Markdownu vypadly hvězdičky:
Je mi líto, že jsem to nezkontroloval. Zde je opravený výraz:
^(?=.[A-Z])(?=.[0-9])[A-Z0-9]{16}$
Tj. znovu kurzíva.
Myslím, že některé diskuse se zdejšími trolly se ukážou jako výborná škola komunikace s umělou inteligencí ;)
Ale jinak je to zajímavé řešení toho RE, to mne nenapadlo. Akorát je potřeba vyluštit tu hádanku s Markdownem…
\* nefunguje ?
-
\* nefunguje ?
Na to se ptejte ChatGPT, to ona vypisuje výstup v Markodownu a neescapuje speciální znaky.
-
\* nefunguje ?
Na to se ptejte ChatGPT, to ona vypisuje výstup v Markodownu a neescapuje speciální znaky.
Aha,jasně. zeptám se :-)
-
Můžete zkusit [url https://chat.openai.com/chat]ChatGPT[/url].
Vytvoř regulární výraz (PCRE kompatibilní), který bude odpovídat přesně 16 znakům - velkým písmenům nebo číslicím. V textu však musí být písmena i číslice, posloupnost 16 znaků nebo 16 písmen regulárnímu výrazu nevyhoví.
Správný RE, když doplním ty Markdownem ztracené hvězdičky, tedy je:
^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{16}$
Vzal jsem vaše zadání úkolu doslovně, prohnal to přes Deepl a https://www.autoregex.xyz/
a koukejte, co z toho vypadlo
^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{16}$
Paráda!!!
-
\* nefunguje ?
Na to se ptejte ChatGPT, to ona vypisuje výstup v Markodownu a neescapuje speciální znaky.
Dal jsem na chatGPT taky to vaše zadání přeložené deepl do angličtiny, výsledek stejný jako z češtiny, ale všiml jste si, že on tam ty hvězdičky vygeneruje a pak skryje ?