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 19:55 | Zajímavý článek

Byly zveřejněny (pdf) podrobnosti o kritické bezpečnostní chybě CVE-2017-12542 v HPE iLO 4 (Integrated Lights-Out), tj. v proprietárním řešení společnosti Hewlett Packard Enterprise pro vzdálenou správu jejich serverů. Bezpečnostní chyba zneužitelná k obejití autentizace a k vzdálenému spuštění libovolného kódu byla opravena již v květnu loňského roku ve verzi 2.53.

Ladislav Hagara | Komentářů: 1
včera 17:55 | Zajímavý projekt

CSIRT.CZ informuje o CTF (Capture the Flag) platformě ZSIS CTF s úlohami pro procvičování praktických dovedností z oblasti kybernetické bezpečnosti a upozorňuje na soutěž Google Capture the Flag 2018, kde je možné vyhrát zajímavé ceny.

Ladislav Hagara | Komentářů: 0
včera 17:00 | Komunita

Byly zveřejněny prezentace a videozáznamy přednášek z prvního československého setkání síťových operátorů CSNOG konaného 11. a 12. června v Brně a semináře IPv6 2018 uskutečněného 6. června v Praze.

Ladislav Hagara | Komentářů: 0
včera 16:11 | Komunita

Svobodný unixový operační systém FreeBSD slaví 25 let. Přesně před pětadvaceti lety, tj. 19. června 1993, byl vybrán název FreeBSD.

Ladislav Hagara | Komentářů: 0
včera 15:11 | Komunita

Oficiální YouTube kanál Blenderu je již několik dní blokován. Nadace Blender Foundation informuje, že od společnosti Google dostala šestistránkový návrh nové smlouvy (pdf). Zdá se, že podmínkou další spolupráce je zapnutí reklam na kanálu, tj. zpeněžení obsahu.

Ladislav Hagara | Komentářů: 22
včera 01:55 | Nová verze

Byla vydána verze 1.13 multiplatformního open source textového editoru Brackets (Wikipedie, GitHub). Přehled novinek v oficiálním oznámení a v poznámkách k vydání. Brackets je nově dostupný také jako balíček ve formátu Flatpak z oficiálního repozitáře Flathub.

Ladislav Hagara | Komentářů: 3
18.6. 18:44 | Komunita

Oficiální YouTube kanál Blenderu je již několik dní blokován. Důvody jsou zatím nejasné. Pravděpodobně chyba YouTube. Dění lze sledovat na Twitteru Tona Roosendaala.

Ladislav Hagara | Komentářů: 18
18.6. 17:55 | Zajímavý software

Na GitHubu byly pod open source licencí LLVM zveřejněny zdrojové kódy překladače programovacího jazyka C++ Zapcc vycházejícího z Clangu/LLVM. Překlad pomocí Zapccu je díky lepšímu kešování obvykle několikrát rychlejší než překlad pomocí Clangu. V březnu loňského roku byl vydán Zapcc ve verzi 1.0.

Ladislav Hagara | Komentářů: 0
18.6. 17:22 | Pozvánky

Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.

xkucf03 | Komentářů: 1
15.6. 22:44 | Zajímavý článek

Na blogu projektu NeoPG (GitHub), kryptografického softwaru vycházejícího z GnuPG, byly zveřejněny 4 příspěvky detailně popisující aktuální bezpečnostní problémy v GnuPG a souvisejících softwarových produktech. V prvním příspěvku je ukázáno, že je možné vytvořit zprávu, o které budou Earlybird, Evolution, Mutt nebo Outlook tvrdit, že jí dešifrovali a přitom ale zpráva vůbec zašifrována nebyla. V druhém příspěvku je popsána

… více »
Ladislav Hagara | Komentářů: 8
Jak čtete delší texty z webových stránek?
 (78%)
 (21%)
 (4%)
 (7%)
 (3%)
 (11%)
Celkem 215 hlasů
 Komentářů: 36, poslední 18.6. 21:16
    Rozcestník

    Haš polí (Ruby)

    24.2. 18:38 | Přečteno: 861× | Ostatní | poslední úprava: 24.2. 18:52

    Skript ukládá názvy html elementů jako klíče a hodnota pro každý klíč je pole s čísly řádků, na kterých se element vyskytuje. Metoda scan hledá v řetězci všechny výskyty podle vzoru, v případě více nálezů vrací pole. Vzor je jeden nebo více alfanumerických znaků zleva ohraničených znakem < a zprava >, anebo bílým znakem.
    #!/usr/bin/ruby -w
    
    def printtags(tags)	# (hash of arrays)
      tags.each do |k,v|
        puts k
        v.each {|x| print "#{x} " }
        print "\n\n"
      end
    end
    
    
    abort "No file argument." if ARGV[0].nil?
    
    tags = {}
    
    ARGF.each_with_index do |line,n|  
      n += 1
      linetags = line.scan(/<\w+[\s>]/)  
      linetags.each do |t| 
        t.strip!    
        t.delete! "<>"
        if tags.key? t
          tags[t] << n  
        else
          tags[t] = [n]
        end  
      end
    end
    
    array = tags.sort
    tags = array.to_h
    
    printtags tags
    
    Moc jsem to netestoval, tohle jsou spíše poznámky pro mě. Na případné dotazy budu odpovídat se zpožděním, protože zdejší ověřovací systém pro anonymní uživatele je velmi komplikovaný a otravný.        

    Hodnocení: 50 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    sad avatar 24.2. 18:40 sad | skóre: 8 | blog: sad
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Nějaký tip na to, aby ten kód nebyl příště tak odskočený dolů?
    24.2. 19:31 Cabrón
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Napsat delší úvod :-D

    Sidebar má float: right, blok s kódem má nastavenu width: 100%, takže to bez změny CSS stránky nejde jinak.
    Bystroushaak avatar 24.2. 20:03 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Ok, k čemu to je?
    linetags = line.scan(/<\w+[\s>]/)
    Viz obligátní You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML.
    Moc jsem to netestoval, tohle jsou spíše poznámky pro mě. Na případné dotazy budu odpovídat se zpožděním, protože zdejší ověřovací systém pro anonymní uživatele je velmi komplikovaný a otravný.
    Proč je takový problém se přihlásit, když to očividně umíš, jinak bys neodeslal ten blog?
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    24.2. 20:22 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    24.2. 20:45 sad
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Tak tohle jsem nečetl, ale spíše by mně pomohly příklady za jakých okolností ten můj regex nebude fungovat.

    Protože se nechci pořád přihlašovat a odhlašovat.
    Bystroushaak avatar 24.2. 21:41 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Protože se nechci pořád přihlašovat a odhlašovat.
    Tak se.. ehm.. no, jak to jenom říci.. .. neodhlašuj?
    Tak tohle jsem nečetl, ale spíše by mně pomohly příklady za jakých okolností ten můj regex nebude fungovat.
    Například nechápe HTML komentáře, kde může být kód zakomentovaný. Obecně nemá kontext, takže nechápe ani kusy javascriptu, nebo třeba vkládané CSS:
    <script>
    alert("<tag>");
    </script>
    
    Taky nepočítá s tagy sahající přes víc řádků:
    <meta http-equiv="Content-Type"
          content="text/html; charset=utf-8">
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    24.2. 22:09 sad
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Taky nepočítá s tagy sahající přes víc řádků
    Je úplně jedno na kolik řádků je ten tag, protože jakmile scan narazí na bílý znak za meta, tak přestane hledat.
    Bystroushaak avatar 24.2. 22:20 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    No, ano. To vidím. Proto jsem se ptal původně k čemu to je, protože si fakt moc neumím představit použití.
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    Bedňa avatar 25.2. 14:38 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Takže to nejde a preto treba použiť BeautifulSoup ktorý interne používa REGEX :)

    Ten jeho parser stojí samozrejme za kulové, ale v REGEX idú obidva príklady ľahko spraviť (re.MULTILINE). Horšie je, že v HTML sú značky párové, nepárové a párno/nepárne, s tým som mal problém, pretože aj takýto zápis je podľa W3C OK:
    <ol>
      <li>text1
      <li>text2</li>
    </ol>
    Takých podpásoviek je viacero.
    KERNEL ULTRAS video channel >>>
    25.2. 15:08 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Fuck computer science. Regex rules all t3h gr4mm4rz!
    Bystroushaak avatar 25.2. 16:13 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Takže to nejde a preto treba použiť BeautifulSoup ktorý interne používa REGEX :)
    Já třeba BeautifulSoup nepoužívám, napsal jsem si vlastní parser, regexp free. Ale je teda fakt, že je nekompletní, nedělá validace a neumí DTD a ten <script> taky neumí komplexně zpracovat (pokud tam bude cosi jako alert("</script>"), tak na tom padne). Jinak v moderním html, respektive javascriptu si můžeš definovat vlastní gramatiky a to pak parsovat nezvládne asi nic, kromě skutečného engine. Viz například brython a jeho
    <script type="text/python">
    Takých podpásoviek je viacero.
    Jo, například P nemusí mít ukončovací tag a funguje to. To kdysi parsovat, to byla taky prdel.
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    Bedňa avatar 25.2. 18:16 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Jasne nejaký konečný parser je problém napísať a veľa krát je to zbytočné. Keď si človek programuje vlastný parser, tak za nejakým účelom, čo tu autor neosvetlil.

    Ja mám svoj na kontrolu HTML kódu, takže všetko ostatné zahadzuje. Vo výsledku zobrazí len tagy a pekne ich odsadí ako bonus vypíše koľko tagov tam je a či je všetko OK.
    KERNEL ULTRAS video channel >>>
    Jendа avatar 25.2. 20:59 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Takže to nejde a preto treba použiť BeautifulSoup ktorý interne používa REGEX :)
    Zdroj?

    Pokud si odmyslíme limit na maximální zanoření, tak podle mě HTML nejde parsovat regulárními výrazy, protože je prostě o level výš v Chomského hierarchii (regexp vede na konečný automat, ale pro parsování HTML potřebuješ zásobníkový automat).
    Klimakemp ve zkratce: Účastníci jeli vlakem na naftu a autobusem na naftu protestovat proti těžbě fosilních paliv.
    25.2. 21:14 perlátor
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Však to nemusí dělat regexp najednou, na to nemá, to máš pravdu, ale dá se to bez problémů prohnat výrazem znovu a znovu až do úplného rozebrání.
    25.2. 21:42 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    *facepalm*

    Jsem to říkal, že s tím někdo přijde. :D
    Bedňa avatar 25.2. 21:52 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Aký s tým máš problém? Aj iné riešenia budú napísané na viac ako jeden riadok.

    Facepalm.
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 25.2. 22:12 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Aký s tým máš problém? Aj iné riešenia budú napísané na viac ako jeden riadok.
    No, tak hlavně klást důraz na to, že to bude co nejkratší mi přijde jako kladení důrazu na špatnou metriku.

    Osobně nevidím důvod, proč regex používat. Jakože, v čem je výhoda vkládat do svého jazyka pattern matching brainfuck skládající se z pravidel o jednom znaku? Regex přestane být fakt rychle čitelný i pro docela triviální záležitosti a nemáš tam debugger, kvalitní chybové hlášky, dokumentaci, prostě nic. Jediná jeho výhoda je, že je „krátký“, což je ale typicky iluze daná tím, že problém, který se snažíš parsovat nechápeš v celé jeho komplexitě. Viz starý dobrý emailregex.com, který v ruby definuje regexp na korektní (dle RFC) parsování emailu v ruby/perlu takto:
    (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
     )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
     \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
     ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
     \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
     31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
     ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
     (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
     (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
     |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
     ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
     r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
     \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
     ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
     )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
     \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
     )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
     )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
     *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
     |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
     \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
     \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
     ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
     ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
     ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
     :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
     :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
     :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
     [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
     \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
     \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
     @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
     (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
     )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
     ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
     :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
     \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
     \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
     ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
     :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
     ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
     .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
     ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
     [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
     r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
     \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
     |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
     00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
     .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
     ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
     :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
     (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
     \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
     ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
     ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
     ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
     ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
     ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
     \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
     ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
     ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
     :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
     \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
     [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
     ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
     ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
     ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
     ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
     @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
     \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
     ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
     )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
     ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
     (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
     \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
     \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
     "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
     *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
     +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
     .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
     |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
     ?:\r\n)?[ \t])*))*)?;\s*)
    A to je jen email, parsovat tím URL, nebo nedej bože HTML, to je o hodně horší.

    Uznávám použití na quick and dirty věci, ale obecně v kódu? Proč? Typicky co jsem tak viděl, tak je to často dáno jen tím, že autor není schopný napsat parser v čemkoliv jiném (eBNF třeba), i když by tam mohl být podstatně čitelnější.
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    Bedňa avatar 25.2. 23:19 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Je rýchly a osobne ho používam z rozumom, na email ide použiť aj '[^@]+@[^@]+\..+' a bude to úplne korektné. Pretože RFC nepoznám a neviem aké všetky znaky môže obsahovať emailová adresa, tak mi to postačí. Ak budeš riešiť RFC hocijak inak, tak tam bude tiež kopec "IF", pretože v tom regulárnom výraze vidím kopec podmienok a ľahko to posereš a debuger nič hlásiť nebude, pretože on netuší, že ty chceš pársovať email, zatiaľ nemá AI.
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 25.2. 23:29 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Je rýchly a osobne ho používam z rozumom, na email ide použiť aj '[^@]+@[^@]+\..+' a bude to úplne korektné. Pretože RFC nepoznám a neviem aké všetky znaky môže obsahovať emailová adresa, tak mi to postačí.
    Jinými slovy; Přijde ti to korektní, protože ti nevadí, že to korektní není.
    Ak budeš riešiť RFC hocijak inak, tak tam bude tiež kopec "IF", pretože v tom regulárnom výraze vidím kopec podmienok a ľahko to posereš a debuger nič hlásiť nebude, pretože on netuší, že ty chceš pársovať email, zatiaľ nemá AI.
    To si děláš prdel, ne? Od toho jsou parsovací gramatiky. Tohle je například zbytečně ukecané, protože je to určené do emailového klienta a tak to řeší ještě skupiny a jména, ale dá se to použít jako ukázka: email-address.bnf. Přímo RFC je napsané v abnf.
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    Bedňa avatar 25.2. 23:46 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Ntuším prečo ten REGEX pre email je tak zložitý, pretože napríklad z tvojho odkazu
    ALPHA | DIGIT | "!" | "#" | "$" | "%" | "&" | "'" |
    "*" | "+" | "-" | "/" | "=" | "?" | "^" | "_" |
    "`" | "{" | " | " | "}" | "~"
    napíšem
    [a-zA-Z0-9 no a tie ďaľšie znaky]
    Zrejme toho rieši ďaleko viac.

    Inak aj v REGEX existuje ALPHA a DIGIT, zapisuje sa to ako
    [[:alpha:]] [[:digit:]]
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 25.2. 23:52 Bystroushaak | skóre: 33 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Mně to vysvětlovat nemusíš, jsem si toho vědom. Myslím, že ti úplně uniká pointa toho, co jsem napsal.
    „At the core of his own mind a white star seemed to burn, around which lust for knowledge spun in ever tighter orbits.“
    Bedňa avatar 26.2. 00:06 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Tak písal si že REGEX je zbytočný, podľa mňa dobrý nástroj. Veľa krát potrebuješ pársovať jednoduchý text na postupnosť znakov, napr. <h1>...</h1>, tak napíšeš '<h1>(.*)</h1>' a máš výsledok. V základe je syntax primitívna a nieje problém sa ju naučiť.
    KERNEL ULTRAS video channel >>>
    Bedňa avatar 26.2. 00:13 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Inak aj REGEX je vlastne pasovacia gramatika.
    KERNEL ULTRAS video channel >>>
    Jendа avatar 26.2. 01:13 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Ano, je, u většiny implementací regexů je to konkrétně regulární/L3 gramatika, ale podle mě ti uniká, že existuje hierarchie gramatik, a těmi, co jsou v hierarchii níže, prostě principiálně není možné vyšší jazyky popsat.
    Klimakemp ve zkratce: Účastníci jeli vlakem na naftu a autobusem na naftu protestovat proti těžbě fosilních paliv.
    wamba avatar 26.2. 08:40 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Často jsou implementace regexů něčím rozšířeny, např. pomoci PCRE můžeš popsat bezkontextový jazyk aⁿbⁿ
    perl -E 'say $1 if "aaabbb" =~ / \A (a (?1)? b) \z /x'
    
    i kontextový aⁿbⁿcⁿ
    perl -E 'say "$1, $2" if "aaabbbccc" =~ / \A (?= a* (b (?1)? c) )  ( a (?2)? b ) c* \z /x'
    
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    Bedňa avatar 26.2. 19:19 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Máš pravdu, ale ja som to tu v komentároch osvetloval ako s ním pracujem.

    REGEX používam ako nástroj na čo bol určený a to je parsovať text. Pokiaľ ide zložitejšie štruktúry tak používam nejaký jazyk a REGEX.

    HTML: zoberiem si tag '<([[:alpha:]]+)[^<]*>(.*)<\\1>' no a keď je to TRUE, tak s tým ďalej môžem pracovať. Samozrejme musím mať množinu nepárových tagov a párovo/nepárových tagov, aby som s tým ďalej mohol pracovať (Dík W3C).

    Jako viem chalani že máte pravdu, že sú tu nástroje na to určené a väčšina Jazykov má proste na HighLevel nejaké nástrojé, mno kurwa, tie väčšinou stoja za kulové, ako npríklad:

    Ideš spraviť posratý export XML do CSV, tak to na 99.99% skape. Mno a po čom šiahnem? Mno napíšem si to sám s REGEXP + niečo.
    KERNEL ULTRAS video channel >>>
    Josef Kufner avatar 26.2. 21:49 Josef Kufner | skóre: 68
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Např. <a data-lt="<"></a> je validní HTML, které ti to neveme. A tohle ti to matchne blbě: <a><![CDATA[foo</a>bar]]></a>

    Ušetříš si spoustu starostí, když namísto regexpu použiješ DOM parser a pustíš na to XPath.
    Hello world ! Segmentation fault (core dumped)
    Bedňa avatar 26.2. 23:11 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Ako som písal, viem na čo púšťam ten parser a ak to budem spúšťať nad dementnými :) atribútmi, tak tam pridám parser.
    KERNEL ULTRAS video channel >>>
    27.2. 00:40 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    +1
    25.2. 22:29 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Použít to na nějakou podčást je irelevantní implementační detail (a většinou spíš prasárna).
    Bedňa avatar 25.2. 23:20 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Okrem výgrckov máš aj niečo k téme?
    KERNEL ULTRAS video channel >>>
    26.2. 10:32 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Na tom není, co diskutovat.
    25.2. 21:54 perlátor
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Pořádek musí bejt! ;)
    Bedňa avatar 25.2. 21:17 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Takže to nejde a preto treba použiť BeautifulSoup ktorý interne používa REGEX :)
    Zdroj?
    Pozrel som sa do zdrojáku.
    Pokud si odmyslíme limit na maximální zanoření, tak podle mě HTML nejde parsovat regulárními výrazy, protože je prostě o level výš v Chomského hierarchii (regexp vede na konečný automat, ale pro parsování HTML potřebuješ zásobníkový automat).
    To samozrejme obídeš kombináciou REGEX a skriptu. Samozrejme to napísať čiste v regulárnom výraze by bola šialenosť.
    KERNEL ULTRAS video channel >>>
    25.2. 21:23 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Samozrejme to napísať čiste v regulárnom výraze by bola šialenosť.
    Především to nejde.
    25.2. 21:41 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    +1. Konečně někdo. ;-)
    25.2. 10:03 luv | skóre: 18 | blog: luv
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Hele nekde parsuju (a upravuju) regexama i zdrojaky pythonu a funguje to jak ma (jasne, ze by to slo rozbit, kdyby nekdo fakt chtel), ale souhlasim, ze parsovat html regexama nedava moc smysl, kdyz i v ruby na to bude funkcionalita ve standardni knihovne.
    25.2. 10:12 ehm
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Asi záleží, čemu říkáš parsování.
    25.2. 17:25 perlátor
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Nebuďte malomyslní a raději se podívejte, jak má vypadat takovej pořádnej regulární výraz 30-40 minuta ;).
    xsubway avatar 26.2. 18:38 xsubway | skóre: 13 | blog: litera_scripta_manet
    Rozbalit Rozbalit vše Re: Haš polí (Ruby)
    Diky za odkaz. Fakt pobavilo. Nakonec jsem se díval 20 minut :-)

    Založit nové vláknoNahoru

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