abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 17:11 | IT novinky

    Společnost Jolla spustila kampaň na podporu svého nového telefonu Jolla Phone se Sailfish OS. Dodání je plánováno na první polovinu příštího roku. Pokud bude alespoň 2 000 zájemců. Záloha na telefon je 99 €. Cena telefonu v rámci kampaně je 499 €.

    Ladislav Hagara | Komentářů: 16
    včera 15:11 | IT novinky

    Netflix kupuje Warner Bros. včetně jejích filmových a televizních studií HBO Max a HBO. Za 72 miliard dolarů (asi 1,5 bilionu korun).

    Ladislav Hagara | Komentářů: 2
    včera 14:11 | IT novinky

    V Las Vegas dnes končí pětidenní konference AWS re:Invent 2025. Společnost Amazon Web Services (AWS) na ní představila celou řadu novinek. Vypíchnout lze 192jádrový CPU Graviton5 nebo AI chip Trainium3.

    Ladislav Hagara | Komentářů: 0
    včera 00:33 | Nová verze

    Firma Proxmox vydala novou serverovou distribuci Datacenter Manager ve verzi 1.0 (poznámky k vydání). Podobně jako Virtual Environment, Mail Gateway či Backup Server je založená na Debianu, k němuž přidává integraci ZFS, webové administrační rozhraní a další. Datacenter Manager je určený ke správě instalací právě ostatních distribucí Proxmox.

    |🇵🇸 | Komentářů: 7
    4.12. 23:44 | Nová verze

    Byla vydána nová verze 2.4.66 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 5 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    4.12. 14:00 | IT novinky

    Programovací jazyk JavaScript (Wikipedie) dnes slaví 30 let od svého oficiálního představení 4. prosince 1995.

    Ladislav Hagara | Komentářů: 0
    4.12. 04:22 | Bezpečnostní upozornění

    Byly zveřejněny informace o kritické zranitelnosti CVE-2025-55182 s CVSS 10.0 v React Server Components. Zranitelnost je opravena v Reactu 19.0.1, 19.1.2 a 19.2.1.

    Ladislav Hagara | Komentářů: 3
    4.12. 02:44 | Komunita

    Bylo rozhodnuto, že nejnovější Linux 6.18 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2027. LTS jader je aktuálně šest: 5.10, 5.15, 6.1, 6.6, 6.12 a 6.18.

    Ladislav Hagara | Komentářů: 0
    4.12. 02:22 | Nová verze

    Byla vydána nová stabilní verze 3.23.0, tj. první z nové řady 3.23, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    3.12. 18:11 | Nová verze

    Byla vydána verze 6.0 webového aplikačního frameworku napsaného v Pythonu Django (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (47%)
     (19%)
     (18%)
     (22%)
     (15%)
     (24%)
     (16%)
     (18%)
    Celkem 434 hlasů
     Komentářů: 18, poslední 2.12. 18:34
    Rozcestník

    Dotaz: Regex na cestu k souboru v xml/cpp

    18.4.2017 20:37 דניאל | blog: godismyjudge
    Regex na cestu k souboru v xml/cpp
    Přečteno: 522×
    Potŕeboval bych poradit s regexem. Potřebuji v Qt, pomocí QRegularExpression, udělat regex, který mi v souborech najde řetězce, které jsou cesty "resource souborů" v Qt. Taková cesta má formát :/nějaká/cesta/soubor.abc. Potřebuji capture na část nějaká/cesta/soubor.abc. Problém je, že jednoduchý regex mi pak matchne v řetězci return ":/nějaká/cesta"; const char *a = ".txt"; část ":/nějaká/cesta"; const char *a = ".txt, což je špatně. Musím to tedy udělat přísněji. Cesta je buď v dvojitých uvozovkách, v jednoduchých uvozovkách, v html/xml tagu nebo v css v závorkách (např. url(:/bla/bla.abc)). A to je problém. Chtěl bych to mít jako jeden regex, kde by to bylo zkombinované. Nějak bych to nakombinoval s or operací, ale pak bych měl třeba na ":/moje/cesta.abc&t;/tag> match, což také nechci.

    Nejdále jsem se dostal k regexu (["']:\/|>\s*?:\/|\(:)(.*?)(["']|\s*?<|\)) (můžete vyzkoušet třeba na regex101.com). Jenže to matchuje i to, co nechci.
    ":/moje/cesta.abc"
    
    ':/moje/cesta.abc'
    
    <url>:/moje/cesta.abc</url>
    
    <bla><a>:/moje/cesta1.abc<b>:/moje/cesta2.abc</bla>
    
    neco: url(:/moje/cesta.abc)
    
    ":/moje/cesta.abc' // nechci match
    
    <url>:/moje/cesta.abc' // nechci match
    

    Odpovědi

    18.4.2017 20:42 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Zkus s tím souborem pracovat jako s XML - tyto problémy odpadnou.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    19.4.2017 05:58 דניאל | blog: godismyjudge
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Neodpadnou. Jsou to soubory vícero typů (xml/ui, cpp a css), snažím se o regex, který je obslouží všechny (protože v cpp stejně můžu mít kus css či xml/html jako řetězec), pokud možno s co nejméně falešnými výsledky. Ten regex, co jsem napsal, to více méně zvládne, ale je takový ošklivý, jestli by nešel zjednodušit. Ty poslední 2 matche, které nejsou chtěné, zatím tak hrozně nevadí, ale bylo by lepší, kdyby nebyly.
    19.4.2017 07:50 NN
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Puzil bych negativni lookahead. Nekdy je lepsi hledat podminku ktera "nevyhovuje".
    19.4.2017 09:03 ramlok0
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    hledas 4 specificke podminky - zacatek/konce matche - tohle funguje:

    (["]:\/)(.*?)(["])|([']:\/)(.*?)(['])|([>]:\/)(.*?)([<])|([(]:\/)(.*?)([)])
    19.4.2017 19:17 דניאל | blog: godismyjudge
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Ano, matche jsou správné, ale zase tam je problém, že capture group pro tu cestu je pokaždé jiná.
    wamba avatar 19.4.2017 20:29 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp

    Tak je lze pojmenovat. Navíc pravděpodobně půjde regexp složit s řetězců. Tak můžete napsat obdobu následujícího Perl one-lineru:

    perl -nE '
        BEGIN {
            my $cesta = ":(?<cesta>.*?)";
            our $rx= join "|", map {sprintf $_, $cesta} (q{"%s"}, q{\'%s\'}, q{>%s<}, q{\(%s\)});
            say $rx 
        };
        say $+{cesta} while /$rx/g
    ' /tmp/pom.txt             
    
    ":(?<cesta>.*?)"|':(?<cesta>.*?)'|>:(?<cesta>.*?)<|\(:(?<cesta>.*?)\)
    /moje/cesta.abc
    /moje/cesta.abc
    ...
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    20.4.2017 19:01 דניאל | blog: godismyjudge
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Když tam ale mám stejné názvy, dostávám chybu "A subpattern name must be unique" :-(
    wamba avatar 20.4.2017 19:41 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    v Perlu to funguje, tak je třeba odzkoušet jestli to nefunguje i v Qt a nespoléhat se na implementaci na https://regex101.com/
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    21.4.2017 13:01 RM
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Já, pokud má být cílem minimalizovat nečitelnost (reg. výrazu), bych ty dva řádky napsal takhle (já ten sprintf nemusim;):
        $cesta = ":(?<cesta>.*?)";
        @maska=qw{ "cesta" 'cesta' >cesta< \(cesta\) };
        s/cesta/$cesta/ foreach @maska;
        $rx= join "|", @maska;
    
    20.4.2017 15:02 ramlok0
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Ok, opraveno, ted je capture group vzdy stejna. ((["'])|(>)?|(\()?):\/(.*?)(\1|(?(1)<)|(?(1)\)))
    20.4.2017 18:58 דניאל | blog: godismyjudge
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Teď to ale matchuje ty 2, které nechci, a naopak ty, co chci, to nematchuje. No asi to nebude tak jednoduché, jak jsem si myslel.
    ":/moje/cesta.abc'
    <url>:/moje/cesta.abc'
    
    20.4.2017 19:38 ramlok0
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Hm, me to funguje, nemas extra mezeru za posledni zavorkou?
    wamba avatar 20.4.2017 20:08 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    u mě to taky funguje, ale selže to při: <url>:/cest/a)
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    21.4.2017 19:33 דניאל | blog: godismyjudge
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Opravdu to byla mezera na konci, omlouvám se. Teď je stále na těch 2 posledních ale match, s tím, že group 0 je :/ a ostatní jsou prázdné. Ale je to pokrok, děkuji.
    20.4.2017 20:03 Charon
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    OK, zkusil jsem pro Vás inovaci REGEX od RAMLOK.
    ((["'])|[>\(]):\/(.*?)(\2|[<\)])
    Přínosem v řešení je dekompozice stop-tokenů od match-textu. Tím vznikne kratší zápis, který je i přehlednější. Čímž neříkám, že původní zápis byl špatný. Nuže, posuďte teď můj.

    Bye.
    21.4.2017 19:41 דניאל | blog: godismyjudge
    Rozbalit Rozbalit vše Re: Regex na cestu k souboru v xml/cpp
    Tohle vypadá opravdu dobře, asi ho použiju. Regexem to asi lépe nepůjde a bez plnohodnotných parserů prostě nechtěný match bude moci nastat. To s tou \2 teď vidím poprvé, netušil jsem, že něco takového jde.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.