Oddělovač v regulárních výrazech
Školení, která pořádám
V PHP jsou kromě POSIXových regulárních výrazů (které jsou slabé a pomalé), také Perlové. Regulární výraz se v Perlových regulárních výrazech uvozuje jedním znakem (obvykle /
), následuje maska a nakonec znovu první znak a případné modifikátory. Přijde mi to jako ukázková „Perlovina“, mnohem čistší by bylo předávat jenom masku a případné modifikátory jako další parametry funkce, ale s tím už nic nenadělám. Otázka je, jaký znak pro oddělovač používat. Lomítko je krajně nepraktické např. při parsování HTML, takže já osobně používám vlnku ~
– skoro nikde se nepoužívá a je dostatečně výrazná, takže je na první pohled poznat, kde končí maska a začínají modifikátory, narozdíl např. od !
, který někdo také používá.
<?php
preg_match('~<a href="([^"]+)">(.*)</a>~U', $body);
?>
Od PHP 4.0.4 jdou používat i oddělovače v podobě závorek ()
, {}
, []
nebo <>
. Jejich výhoda spočívá v tom, že je uvnitř výrazu můžeme použít bez jakéhokoliv ošetřování, nevýhoda zase v tom, že jako oddělovač nejsou moc výrazné.
Diskuse
brm:
Ja pouzivam (vetsinou) svislou carku |.
A divit se perlovinam v perl-like regexpech ... mne se to nahodou libi :)
Nojo, ale to je pak opruz psat výčty (jedna|dva|tri), ne?
Nejcasteji svislitko (tj. |). Zkousel jsem vsechno mozne, vcetne {expr}mods, ale nakonec jsem skoncil u svislitka.
Prave diky tem oddelovacum jsem se PCRE driv bal, bylo to pro me jak cinstina. Kdyz jsem ale zjistil, ze vetsinu ereg_ vyrazu staci obalit oddelovacem a funguji pak i s preg_, s posixem jsem definitivne skoncil.
Juzna:
A jiank mezi tema oddelovacema neni zadnej rozdil?
Just stejny na zacatku a na konci a je jedno ktery? Nebo se jeste nejak lisi?
AndzinSan:
no ja ani len netušim čo su to tie regularne vyrazi, ocenil by som nejaky detajlnejsi ppopis
Honza Odvárko:
Já používám jako oddělovač hvězdičku a jsem za vodou ;)
Jakub Tesárek:
Definitivně tildu. Už léta používám ~ a pln2 mi to vyhovuje. Jak píše Jakub, skoro nikde se nepoužívá a navíc jsou za ní hezky vidět další modifikátory.
Jinak k tomu regulárnímu výrazu cos posílal na fb, proč píšeš [A-Za-z0-9_] místo prostého \w? Pak jsou ty regulární výrazy strašně dlouhé a nepřehledné ne, když místo dvou znaků použiješ 10.
Jakub Vrána :
\w skoro nepoužívám, protože závisí na locales: http://php.net/regexp.reference.escape. Nejsem si jist, jestli i v JavaScriptu, ale onen regulární výraz používám s mírnými úpravami v PHP i v JavaScriptu, tak těch úprav nechci dělat víc, než je nezbytně nutné.
Miroslav Koula:
Já dost často používám mřížku # a semtam i klasické /, když se mi to nikde nehádá - nedělám HTML a po Jakubovi sem zdědil i vlnovku ~ a nechávám jí tam :-)
Diskuse je zrušena z důvodu spamu.