Podvodné reklamy na sociálních internetových platformách, jako je Facebook, Instagram nebo X, vytvořily loni v Česku jejich provozovatelům příjmy 139 milionů eur, tedy zhruba 3,4 miliardy korun. Proti roku 2022 je to nárůst o 51 procent. Vyplývá to z analýzy Juniper Research pro společnost Revolut. Podle výzkumu je v Česku zhruba jedna ze sedmi zobrazených reklam podvodná. Je to o 14,5 procenta více, než je evropský průměr, kde je podvodná každá desátá reklama.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.6 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.
Czkawka a Krokiet, grafické aplikace pro hledání duplicitních a zbytečných souborů, byly vydány ve verzi 11.0. Podrobný přehled novinek v příspěvku na Medium. Od verze 7.0 je vedle frontendu Czkawka postaveného nad frameworkem GTK 4 vyvíjen nový frontend Krokiet postavený nad frameworkem Slint. Frontend Czkawka je už pouze v udržovacím módu. Novinky jsou implementovány ve frontendu Krokiet.
Jiří Eischmann na svém blogu publikoval článek Úvod do MeshCore: "Doteď mě radioamatérské vysílání úplně míjelo. Když jsem se ale dozvěděl, že existují komunity, které svépomocí budují bezdrátové sítě, které jsou nezávislé na Internetu a do značné míry taky elektrické síti a přes které můžete komunikovat s lidmi i na druhé straně republiky, zaujalo mě to. Když o tom přede mnou pořád básnili kolegové v práci, rozhodl jsem se, že to zkusím taky.
… více »Byla vydána verze 0.5.20 open source správce počítačových her na Linuxu Lutris (Wikipedie). Přehled novinek v oznámení na GitHubu. Instalovat lze také z Flathubu.
Peter Steinberger, autor open source AI asistenta OpenClaw, nastupuje do OpenAI. OpenClaw bude převeden pod nadaci a zůstane otevřený a nezávislý.
Společnost Backblaze zveřejnila statistiky spolehlivosti pevných disků používaných ve svých datových centrech za rok 2025. Ke konci roku 2025 vlastnila 349 462 pevných disků. Průměrná AFR (Annualized Failure Rate), tj. pravděpodobnost, že disk během roku selže, byla 1,36 %. V roce 2024 to bylo 1,57 %. V roce 2023 to bylo 1,70 %. V roce 2022 to bylo 1,37 %.
Nástroj sql-tap je proxy mezi aplikací a databází, které zachytává všechny SQL dotazy a zobrazuje je v terminálovém rozhraní. Zde lze téměř v reálném čase zkoumat dotazy, sledovat transakce a spouštět SQL příkaz EXPLAIN. Podporované databázové systémy jsou pouze PostgreSQL a MySQL. Zdrojový kód je dostupný na GitHubu, pod licencí MIT.
Byla vydána nová verze 9.2 textového editoru Vim (Vi IMproved). Přináší vylepšené doplňování, podporu schránky ve Waylandu, podporu XDG Base Directory (konfigurace v $HOME/.config/vim), vylepšené Vim9 skriptování nebo lepší zvýrazňování změn. Vim zůstává charityware. Nadále vybízí k podpoře dětí v Ugandě. Z důvodu úmrtí autora Vimu Brama Moolenaara a ukončení činnosti jím založené charitativní organizace ICCF Holland projekt Vim navázal spolupráci s charitativní organizaci Kuwasha.
Byl představen editor MonoSketch, webová aplikace pro tvorbu diagramů, technických nákresů, flowchartů a různých dalších vizualizací, to vše jenom z ASCII znaků. Všechny operace běží pouze v prohlížeči uživatele a neprobíhá tedy žádné nahrávání dat na server. Zdrojový kód aplikace (drtivá většina Kotlin, žádné C#) je dostupný na GitHubu pod licencí Apache 2.0.
Mezi obecné regexpy, které podporují všechny možné implementace (Bash, Perl, grep, GNU sed, GNU awk, glibc /regex.h/, atd.), patří množiny znaků. Ty reprezentují jeden znak a používají se pro označení části řetězce, která může mít různé podoby (různé znaky v určité části). Zapisují se mezi hranaté závorky.
b[au]f # Odpovídá řetězci baf nebo buf.
[a-zA-Z] # Množina rozsahu znaků. Odpovídá jednomu výskytu písmene
# A až Z (malá i velká písmena,
# pouze bez diakritiky).
[[:alpha:]] # Totéž, ale zahrnuje i písmena s háčky a čárkami
# (pokud jsou nastavené české locales).
[[:alnum:]] # Jako předchozí, ale navíc zahrnuje číslice.
[aeiouy] # Množina malých písmen (a, e, i, o, u, y).
[0-9] # Množina všech číslic.
[[:digit:]] # Jiný zápis téhož.
[123] # Množina číslic 1, 2 a 3.
[[:space:]] # Množina "whitespace" znaků
. # Množina všech znaků. Odpovídá jednomu znaku.
\. # Odpovídá tečce.
\\ # Odpovídá zpětnému lomítku.
\* # Odpovídá hvězdičce.
Přidáte-li za výraz (např. množinu či znak) hvězdičku, změní se jeho význam. Místo jednoho výskytu se bude hledat libovolný počet výskytů; žádný až nekonečno. Například a* odpovídá libovolnému počtu písmen a za sebou. Výraz .* odpovídá úplně všem řetězcům.
Množiny znaků lze přidáním ^ na začátek negovat tak, že znaky v nich obsažené se v daném řetězci nesmějí vyskytovat. Přidáte-li znak ^ jinam, než na začátek, stane se prostým znakem z množiny.
Regexp vždy odpovídá své nejdelší možné variantě v řetězci (v Perlu toto chování lze ovlivnit, vizte níže), takže použijete-li například o odstavec výše zmíněný výraz .* a ihned za něj dáte například [0-9]* (libovolný počet číslic), tak si všimněte, že výraz .* využil své moci a označil vše, co jen mohl a na množinu [0-9]* nezbylo nic, místo toho aby se .* při prvním výskytu číslice zastavil, jak by se někdo mohl mylně domnívat. Zmiňuji se o tom zde proto, že tyto znegované množiny znaků jsou univerzálním řešením tohoto problému. Použijete-li místo původního výrazu .*[0-9]* výraz [^0-9]*[0-9]*, tak výraz [0-9]* označí celé první číslo, na které narazí, jelikož [^0-9]* se před číslicí zastaví. Pro lepší pochopení jsem níže (do části článku o GNU sedu) přidal dva ilustrující příkazy, ale nepředbíhejme. Následuje ukázka znegovaných množin znaků:
[^0-9] # Odpovídá jednomu znaku, který není číslice. [^[:digit:]] # Jiný zápis téhož.
Dále mezi obecné regexpy patří symboly začátku a konce řádku, které mají ovšem tento význam jen tehdy, jsou-li správně umístěny (začátek na začátku a konec na konci výrazu).
^ # Začátek řetězce. $ # Konec řetězce.
Několik ukázek obecných regexpů:
^$ # Odpovídá prázdnému řetězci (začátek a hned konec).
^a. # Odpovídá řetězci, který začíná písmenem 'a'
# a je následován jedním libovolným znakem.
^[^0-9]* # Odpovídá libovolnému počtu nečíselných znaků
# od začátku řetězce
b$ # Odpovídá řetězci, který končí písmenem 'b'.
[0-9].[[:alpha:]] # Odpovídá řetězci, který obsahuje číslici,
# poté libovolný znak a za ním písmeno.
Rozšířené (extended) regexpy značně rozšiřují možnosti těch obecných. Často je třeba je explicitně povolit. Bash je nepodporuje, Perl a GNU awk je používají běžně, grep potřebuje přepínač -E (příp. -P pro použití perlových regexpů; tento přepínač je dostupný, jen pokud byl grep zkompilován s podporou libpcre), GNU sed přepínač -r a při použití regex.h v C/C++ musíte předat funkci regcomp() flag REG_EXTENDED.
Rozšířené jsou možnosti pro zachycení řetězce, ve kterém se určité části několikrát za sebou opakují. Tyto znaky se zapíší za určitou část regexpu.
? # Volitelný výskyt (jeden nebo žádný).
+ # Jeden a více výskytů.
{n} # Za n se dosadí požadovaný počet výskytů.
# Toto nepodporuje GNU awk.
{n,} # Odpovídá n a více výskytům.
{n,m} # Odpovídá n až m výskytům.
Například:
a? # Jedno nebo žádné písmeno a.
[ao]+ # Jeden nebo více výskytů písmen z množiny.
[^ ]{3,5} # Tři až pět znaků různých od mezery.
[0-9]* # Libovolný počet číslic.
Kromě množin znaků jsou dostupné i množiny řetězců resp. výrazů, které se zapisují do kulatých závorek a oddělují pomocí znaku | (pipe).
(str|pwd) # Odpovídá řetězci str nebo pwd.
(foo)+ # Jeden a více výskytů řetězce foo.
(foo|bar)* # Libovolný počet řetězců foo nebo bar.
(gentoo){3,} # Odpovídá třem a více výskytům řetězce gentoo.
((li){2}e)? # Volitelný výskyt řetězce lilie.
Jak jsem naznačil, množina řetězců není úplně správný název, protože zrovna tak může jít o regexpy. Následující množina je složená ze dvou výrazů. Hned za množinou následuje otazník, který znamená, že výskyt všech výrazů z množiny je volitelný. První výraz značí jeden nebo více výskytů znaků a a b za sebou a druhý výraz odpovídá pěti libovolným číslicím.
([ab]+|[0-9]{5})?
Pokud chcete regexp odpovídající například sudému počtu řetězců, lze použít toto:
^((linux){2})*$
Vysvětlení: Máme regexp na označení dvou výskytů řetězce linux za sebou. Když se celý výraz obalí dalšími závorkami, hvězdička za ním zajistí označení též čtyř, šesti, osmi, deseti (atd.) výskytů. Pokud chcete minimálně dva výskyty, použijte místo hvězdičky plus.
Kromě toho, že sed podporuje nahrazování řetězců odpovídajících regexpům, má zajímavou vlastnost, a tou je podpora referencí. Když si regexpem vyberete určitou část řetězce a chcete ji použít i v nové (nahrazující) části, máte možnost použít příkazy podobné následujícím. Předávám sedu řetězec přes echo, abyste si to pro lepší představu mohli rovnou vyzkoušet.
# Ukázka výše (u znegovaných množin) zmiňovaného problému. # Na výraz [0-9]+ zbude jen poslední číslo, tedy 1. echo retezec4241 | sed -r 's/.*([0-9]+)/\1/' # ... a ukázka řešení pomocí znegované množiny. # Výraz [^0-9]* se před první číslicí zastaví; vypíše se 4241. echo retezec4241 | sed -r 's/[^0-9]*([0-9]+)/\1/' # Výraz začínající číslicí bude vložen mezi hvězdičky. echo "nahodne cislo: 11.256" | sed -r 's/([0-9][^ ]+)/*\1*/' # Je možné použít i více referencí. Zkusme třeba označit # řetězec "lol" s libovolným počtem 'o' a za ním nějaké číslo. echo "nejdriv looool a pak cislo 123 ..." | \ sed -r 's:.*(lo+l)[^0-9]+([0-9]+).*:\\1 je \1\n\\2 je \2:'
Za reference jsou považovány pouze regexpy v kulatých závorkách, tedy množiny výrazů.
Perlové regexpy obsahují několik vlastních rozšíření. Jedním z nich jsou množiny.
| Perl | standardní |
| \d | [[:digit:]] |
| \D | [^[:digit:]] |
| \w | [[:alnum:]] |
| \W | [^[:alnum:]] |
| \s | [[:space:]] |
| \S | [^[:space:]] |
Tyto zkrácené zápisy množin se používají úplně stejně jako ty běžné; \d+ – ekvivalent [0-9]+ či [[:digit:]]+, \s{3,} – tři a více whitespace nebo třeba \W* – libovolný počet znaků, které se nevyskytují v množině [[:alnum:]]. Pokud chcete, aby Perl do množin, jako je \w, zahrnoval i písmena s diakritikou, kromě českých locales je třeba v programu nastavit jejich použití:
use locale;
Perl poskytuje možnost kontroly nad tím, zda se bude označovat nejkratší nebo nejdelší možná varianta výrazu. Pokud chceme tu nejkratší, za daný výraz přidáme otazník; nejdelší je výchozí chování regexpů (nejen perlových).
my($string) = "popokatepetl"; # označí (a přiřadí do $1) celý řetězec $string =~ m/(p.*[oel])/; # označí řetězec "po" $string =~ m/(p.*?[oel])/; # totéž, tentokrát obecně $string =~ m/(p[^oel]*[oel])/;
Toto zdaleka není vše, co Perl s regulárními výrazy umí – popsat vše by vydalo na dost dlouhý seriál. Jako zdroj dalších informací můžete použít například manuálovou stránku perlre(1).
Asi neuškodí, když si ukážeme nějaké to využití regulárních výrazů v praxi.
# Vypíše ze souboru (/etc/fstab) unixové cesty bez mezer. egrep -o '(/[^/ ]*)*' /etc/fstab # Vypíše názvy skupin v systému. egrep -o '^[^:]+' /etc/group sed 's/:.*//' /etc/group # Rozparsuje z unixové cesty adresář a soubor. echo /etc/fstab | sed -r 's:(.*)/(.*):adresář "\1", soubor "\2":' # Získá tagy z Ogg a přiřadí je do proměnných ($ALBUM, $ARTIST, $TITLE). eval $(ogginfo Floor-Fee-La.ogg | sed -r -e \ '/^[[:space:]]+(TITLE|ARTIST|ALBUM)=/!d' -e 's:=:=":' -e 's:$:":')
Šikovnou pomůckou je i stránka s ukázkami Užitečné jednořádkové skripty pro sed.
Regexpy se jeví složitější, než ve skutečnosti jsou. Ovšem až na ty perlové, ty složité opravdu jsou :-). Po nějakém čase už píšete rozšířené regexpy bez velkého přemýšlení. Svoje zkušenosti můžete prověřit třeba interaktivními testy na lexmasterclass.com.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
my $mode_map = {
'show' => \ &do_show,
'submit' => \ &do_submit,
};
$mode_map->{$mode}->(@param);
uznávam, na given/when to nemá, obyčajný switch/case to zvládne v pohode.
pre parsovanie textu si pozri \G a modifikátory cg
takže použijete-li například o odstavec výše zmíněný výraz .* a ihned za něj dáte například [0-9]* (libovolný počet číslic), tak si všimněte, že výraz .* využil své moci a označil vše, co jen mohl a na množinu [0-9]* zbyla už jen poslední číslice v řetězciNa [0-9]* nezbyde nic.
[0-9]+.
z nie je posledné písmeno abecedy 
[a-ž]
Len taka drobnost: [a-zA-Z] != [:alpha:]Já jsem někde napsal, že je to totéž?
[a-zA-Z] # Množina rozsahu znaků. Odpovídá jednomu a více
# výskytům písmen A až Z (malá i velká písmena,
# pouze bez diakritiky).
Jenom drobnost - tenhle zapis odpovida prave jednomu znaku z mnoziny A-Z nebo a-z. Kdyby to bylo jeden a vic, tak za tim musi byt "+".
.
Složitější? Ja bych to napsal, tak že ty Perlové uměly vždycky nejvíceNo právě
Dokonce si člověk může napsat vlastní RE engine.
Ale to už jsme se dostal k té nejsložitější věci co jsem kdy viděl a samozřejmě ještě nepochopilAno, přesně o tom mluvím.
(.*)\1 (WikiWiki, MoinMoin apod.), což podle Wikipedie není ani bezkontextové, natož regulární. I v rámci třídy regulárních výrazů ale můžou být některé věci navíc – viz například pojmenované závorky (named captures) v novém pětkovém Perlu.
(str|pwd) # Odpovídá řetězci str nebo pwd.
nemelo by to byt radej:
(str)|(pwd) ?
man perlre:
The first alternative includes everything from the last pattern delimiter (“(”, “[”, or the beginning of the pattern) up to the first “|”, and the last alternative contains everything from the last “|” to the next pattern delimiter. That’s why it’s common practice to include alternatives in parentheses: to minimize confusion about where they start and end.
Nevím, jestli je to perlre, ale můžete zkusit použít \v ve vyhledávaném řetězci. Více viz :help magic
vim ve formě \<slovo\>.
Rozšířené regulární výrazy ...Bash je nepodporujeman bash: An additional binary operator, =~, is available, with the same precedence as == and !=. When it is used, the string to the right of the operator is considered an extended regular expression and matched accordingly. Zatvorky {,} zvladaju aj basic regexpy, len sa musia escapovat pomocou \, inak su to obycajne znaky. V extended regexp presne naopak. Uplne rovnako je to aj s (, ), ? a +. Vsetky su zvladane aj v BRE ak su escapovane. Vsetko je popisovane spravanie grepu a sedu a grep -E a sed -r.
Ale někdo se toho koukám chytnul a změnil to...
bash$ sed -n -e "s/^\([A-Z]\)$/\1/p" <<<a aobzvlášť ve formě
bash$ sed -n -e "s/^.*\([A-Z]\).*$/\1/p" <<<Aa aversus
bash$ sed -r -n -e "s/^.*([[:upper:]]).*$/\1/p" <<<Aa AJinak bash umí i extended regexp.
bash$ [[ a =~ ^[A-Z]$ ]] && echo matches matches bash$ [[ a =~ ^[[:lower:]]$ ]] && echo matches matches bash$ [[ a =~ ^[[:upper:]]$ ]] && echo matches
g na konci.)
echo "retezec4214" | sed 's/e/y/g'Toto není regulární výraz, mimochodem.