Regularni vyrazy (clanek na root.cz)

Michal Kubecek mike na mk-sys.cz
Pátek Květen 2 13:38:55 CEST 2003


On Fri, May 02, 2003 at 01:28:48PM +0200, Petr Vejsada wrote:
> Prave se trapim s regularnimi vyrazy. Potreboval bych overit, zda obsah 
> promenne v shellu odpovida pripustnemu jmenu uzivatele, tedy neobsahuje velka 
> pismena a zacina pismenem.
> Procetl jsem si i clanky na rootu ( http://www.root.cz/clanek.php4?id=342 ), 
> kde Pavel Satrapa uvadi priklad v podstate prave na toto. Ten vyraz by mel 
> vypadat [a-z][a-z0-9\-\_]* , tedy prave jeden znak [a-z] nasledovany 
> libovolnymi znaky z rozsahu a-z, 0-9, pomlcka nebo podtrzitko. Jenomze 
> hodnota 55s4 vyhovi take, protoze analyzator spolkne pismeno 's' nasledovane 
> cislici a je spokojen -> vyhovuje. Jedna se tedy o drobnou nepresnost v 
> clanku. Ale jak to tedy udelat spravne - pomoci regularniho vyrazu zjistit, 
> zda _PRVNI_ znak retezce je opravdu pismeno ?

Nepřesnost to není, protože většina implementací netestuje, zda řetězec
jako celek vyhovuje regulárnímu výrazu, ale zda obsahuje něco, co mu
vyhovuje. Chcete-li otestovat celek, musíte regulární výraz "ukotvit":

^[[:lower:]][[:lower:][:digit:]]*$

Doporučuji zvyknout si používat raději [[:lower:]] než [a-z] (v případě
nastavení českého prostředí to druhé znamená všechna malá písmena kromě 'ž').

                                                          Michal Kubeček


Další informace o konferenci Linux