Portál AbcLinuxu, 30. dubna 2025 07:48
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ě
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.
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.