Programování v C# - Soubory a regulární výrazy - eAMOS
Programování v C# - Soubory a regulární výrazy - eAMOS
Programování v C# - Soubory a regulární výrazy - eAMOS
Transform your PDFs into Flipbooks and boost your revenue!
Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
<strong>Programování</strong> v <strong>C#</strong><br />
<strong>Soubory</strong> a <strong>regulární</strong> <strong>výrazy</strong><br />
Petr Vaněček<br />
1 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Obsah přednášky<br />
◮ Informace o prostředí<br />
◮ Práce se soubory<br />
◮ Regulární <strong>výrazy</strong><br />
2 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Zprostředkování informací<br />
◮ Třída System.Environment<br />
◮ Poskytuje info o systému, procesu, uživateli, . . .<br />
3 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Systém a verze<br />
◮ OSVersion<br />
◮ informace o platformě a verzi<br />
◮ Version<br />
◮ verze runtimu<br />
◮ UserName<br />
◮ uživatelské jméno vlastníka procesu<br />
◮ UserDomainName<br />
◮ název domény<br />
◮ MachineName<br />
◮ název počítače<br />
4 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Cesty<br />
◮ CurrentDirectory<br />
◮ aktuální adresář<br />
◮ SystemDirectory<br />
◮ systémový adresář (většino c:/windows/system32)<br />
◮ GetFolderPath(SpecialFolder)<br />
◮ cesty ke speciálním adresářům<br />
◮ ApplicationData – data aplikací<br />
◮ Desktop – plocha<br />
◮ MyMusic – hudba<br />
◮ StartMenu – nabídka start<br />
◮ . . .<br />
◮ GetCommandLineArgs<br />
◮ parametry příkazové řádky včetně jména souboru<br />
5 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Proudy<br />
◮ V .NET všechny I/O operace řešeny pomocí proudů<br />
◮ Třída System.IO.Stream<br />
◮ abstraktní pohled na množinu bytů<br />
◮ soubor<br />
◮ paměť<br />
◮ TCP/IP<br />
◮ . . .<br />
◮ společné metody<br />
◮ Read<br />
◮ Write<br />
◮ u některých proudu navíc náhodný přístup<br />
◮ metoda Seek<br />
◮ vlastnost Position<br />
6 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Třída FileStream<br />
◮ Pro práci se soubory<br />
◮ Otevření souboru probíhá v konstruktoru<br />
◮ FileStream soubor = new FileStream(string, FileMode);<br />
◮ FileMode určuje způsob otevření<br />
◮ Create – vytvoří či přepíše soubor<br />
◮ Append – otevře existující soubor a zapisuje na jeho konec nebo vytvoří<br />
nový soubor<br />
◮ Open – otevře existující soubor<br />
◮ Při zápisu se využívá buffer<br />
◮<br />
nutno korektně uzavřít soubor<br />
◮ Close<br />
7 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Příklad použití třídyFileStream<br />
FileStream fs = null ;<br />
try<br />
{<br />
fs = new FileStream (" prvni ",FileMode . Create );<br />
byte [] s = new byte []{( byte )’p ’};<br />
fs. Write (s ,0 ,1);<br />
}<br />
finally<br />
{<br />
fs. Close ();<br />
}<br />
nebo<br />
using (fs = new FileStream (" prvni ",FileMode . Create ))<br />
{<br />
byte [] s = new byte []{( byte )’p ’};<br />
fs. Write (s ,0 ,1);<br />
}<br />
8 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Třídy BinaryWriter/Reader<br />
◮ Práce s binárními daty<br />
◮ Konstruktory<br />
◮ BinaryReader/Writer(Stream, Encoding)<br />
◮ možnost nastavit použité kódování<br />
◮ Implementují metody pro práci se základními typy<br />
◮ ... Read...()<br />
◮ načte z proudu hodnotu<br />
◮ byte ReadByte()<br />
◮ void Write()<br />
◮<br />
zapíše do proudu data<br />
9 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Třídy TextReader/Writer<br />
◮ Práce s textem<br />
◮ Odděděné třídy<br />
◮ StringReader/Writer<br />
◮ čtení/zápis do řetězce<br />
◮ StreamReader/Writer<br />
◮ čtení/zápis do proudu<br />
◮ Konstruktory<br />
◮ StreamReader/Writer(string/Stream, Encoding)<br />
◮ Metody Read/WriteLine<br />
10 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Příklad použití tříd StreamReader/Writer<br />
using ( StreamWriter soubor = new StreamWriter (" pokus ",<br />
false , Encoding . UTF8 ))<br />
{<br />
soubor . WriteLine (" můžeme ␣ psát ␣ česky ");<br />
}<br />
using ( StreamReader soubor = new StreamReader (" pokus ",<br />
Encoding . UTF8 ))<br />
{<br />
string retezec = soubor . ReadLine ();<br />
Console . WriteLine ( retezec );<br />
}<br />
11 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Třídy File a FileInfo<br />
◮ Obsahují metody pro práci se soubory<br />
◮ otevírání, kopírování, mazání, . . .<br />
◮ Třída File obsahuje statické metody<br />
◮ Třída FileInfo obsahuje instanční metody<br />
◮ vyplatí se při více operacích nad jedním souborem – nedochází k<br />
opakované kontrole práv<br />
◮ Diskové operace<br />
◮ metoda MoveTo – přesun souboru<br />
◮ metoda CopyTo – kopírování<br />
◮ metoda Delete – mazání<br />
◮ Zjišťování a nastavování přístupu<br />
◮ vlastnost LastAccessTime – poslední přístup<br />
◮ vlastnost Attributes – atributy<br />
12 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Třídy File a FileInfo v .NET 2<br />
◮ Zjednodušení práce se soubory<br />
◮ Načtení a zápis celého souboru pomocí jedné metody<br />
◮<br />
◮<br />
◮<br />
string ReadAllText<br />
string[] ReadAllLines<br />
WriteAllText(string)<br />
◮ WrtieAllLines(string[])<br />
13 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Třídy Directory a DirectoryInfo<br />
◮ Dvě verze podobně jako u souborů<br />
◮ Umožňují operace s adresáři<br />
◮<br />
◮<br />
Delete<br />
Move<br />
◮ Zjištění obsahu adresáře<br />
◮ GetDirectories<br />
◮ GetFiles<br />
◮ Zjišťování a nastavování přístupu<br />
◮ Změna aktuálního adresáře<br />
◮ SetCurrentDirectory<br />
14 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Práce s cestami<br />
◮ Třída Path<br />
◮ Pracuje pouze s řetězcem<br />
◮ Umožňuje získávat a měnit části cesty<br />
◮ GetExtension – vrátí příponu<br />
◮ ChangeExtension – vrátí cestu se změněnou příponou<br />
◮ HasExtension – rozhodne zda cesta obsahuje i příponu<br />
◮ GetFileName – jméno souboru<br />
◮ GetDirectoryName – jméno adresáře<br />
◮ . . .<br />
15 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Příklad<br />
string soubor = Environment . GetCommandLineArgs ()[0];<br />
soubor = Path . ChangeExtension ( soubor ,".cs");<br />
if( File . Exists ( soubor )) {<br />
string [] radky = File . ReadAllLines ( soubor );<br />
foreach ( string radka in radky ) {<br />
Console . WriteLine ( radka );<br />
}<br />
}<br />
16 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Hlídání souborů<br />
◮ Třída FileSystemWatcher<br />
◮ sleduje změny v nastaveném adresáři<br />
◮ Vyvolává události<br />
◮ Changed – změna<br />
◮ Created – vytvoření<br />
◮ Deleted – smazání<br />
◮ Renamed – přejmenování<br />
◮ Pomocí vlastností Filter a NotifyFilter možno nastavit jaké<br />
události a které soubory se mají sledovat<br />
17 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Hlídání souborů – příklad<br />
public static void Main ( string [] Args ) {<br />
string cesta = Environment . GetCommandLineArgs ()[0];<br />
cesta = Path . GetDirectoryName ( cesta );<br />
FileSystemWatcher hlidac = new FileSystemWatcher ( cesta );<br />
hlidac . Created += new FileSystemEventHandler ( Vytvoreni );<br />
hlidac . EnableRaisingEvents = true ;<br />
}<br />
Console . WriteLine (" Tady ␣ hlidam ␣ja");<br />
Console . ReadKey ();<br />
private static void Vytvoreni ( object source ,<br />
FileSystemEventArgs e)<br />
{<br />
Console . WriteLine (" Vytvoril ␣se:␣" + e. FullPath );<br />
}<br />
18 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Co jsou vlastně zač?<br />
◮ Co jsou <strong>regulární</strong> <strong>výrazy</strong>?<br />
19 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Co jsou vlastně zač?<br />
◮ Co jsou <strong>regulární</strong> <strong>výrazy</strong>?<br />
◮ univerzální pomocník při práci s textem<br />
◮ vyhledávání<br />
◮ rozdělování<br />
◮ nahrazování<br />
19 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Co jsou vlastně zač?<br />
◮ Co jsou <strong>regulární</strong> <strong>výrazy</strong>?<br />
◮ univerzální pomocník při práci s textem<br />
◮ vyhledávání<br />
◮ rozdělování<br />
◮ nahrazování<br />
◮ Jak to vypadá?<br />
19 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Co jsou vlastně zač?<br />
◮ Co jsou <strong>regulární</strong> <strong>výrazy</strong>?<br />
◮ univerzální pomocník při práci s textem<br />
◮ vyhledávání<br />
◮ rozdělování<br />
◮ nahrazování<br />
◮ Jak to vypadá?<br />
◮ kombinace normálních a řídících znaků, které definují vzor (pattern)<br />
19 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Co jsou vlastně zač?<br />
◮ Co jsou <strong>regulární</strong> <strong>výrazy</strong>?<br />
◮ univerzální pomocník při práci s textem<br />
◮ vyhledávání<br />
◮ rozdělování<br />
◮ nahrazování<br />
◮ Jak to vypadá?<br />
◮ kombinace normálních a řídících znaků, které definují vzor (pattern)<br />
◮ A v praxi?<br />
19 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Co jsou vlastně zač?<br />
◮ Co jsou <strong>regulární</strong> <strong>výrazy</strong>?<br />
◮ univerzální pomocník při práci s textem<br />
◮ vyhledávání<br />
◮ rozdělování<br />
◮ nahrazování<br />
◮ Jak to vypadá?<br />
◮ kombinace normálních a řídících znaků, které definují vzor (pattern)<br />
◮ A v praxi?<br />
◮ např.<br />
◮ e – vyhledá písmeno ”e”<br />
◮ eva – vyhledá řetězec ”eva”<br />
19 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
◮ Množina znaků<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
◮ Množina znaků<br />
◮ e[vm]a – eva,ema<br />
◮ e[^m]a – eva, esa, eta, (ne ema)<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
◮ Množina znaků<br />
◮ e[vm]a – eva,ema<br />
◮ e[^m]a – eva, esa, eta, (ne ema)<br />
◮ Speciální znaky<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
◮ Množina znaků<br />
◮ e[vm]a – eva,ema<br />
◮ e[^m]a – eva, esa, eta, (ne ema)<br />
◮ Speciální znaky<br />
◮ \w – alfanumerický znak<br />
◮ \d – číslo<br />
◮ \s – bílý znak (mezera, tabulátor, . . . )<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
◮ Množina znaků<br />
◮ e[vm]a – eva,ema<br />
◮ e[^m]a – eva, esa, eta, (ne ema)<br />
◮ Speciální znaky<br />
◮ \w – alfanumerický znak<br />
◮ \d – číslo<br />
◮ \s – bílý znak (mezera, tabulátor, . . . )<br />
◮ A tečka?<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Více znaků<br />
◮ Libovolný znak<br />
◮ e.a – eva, ema, esa, . . .<br />
◮ Množina znaků<br />
◮ e[vm]a – eva,ema<br />
◮ e[^m]a – eva, esa, eta, (ne ema)<br />
◮ Speciální znaky<br />
◮ \w – alfanumerický znak<br />
◮ \d – číslo<br />
◮ \s – bílý znak (mezera, tabulátor, . . . )<br />
◮ A tečka?<br />
◮ \.<br />
20 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Skupiny<br />
◮ (vzor) – se skupinami možno dále pracovat<br />
◮ Jednotlivé skupiny jsou číslovány (celý výraz má číslo 0)<br />
◮ \číslo – zopakování skupiny ve výrazu<br />
◮ (.)\1<br />
21 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Skupiny<br />
◮ (vzor) – se skupinami možno dále pracovat<br />
◮ Jednotlivé skupiny jsou číslovány (celý výraz má číslo 0)<br />
◮ \číslo – zopakování skupiny ve výrazu<br />
◮ (.)\1 – dva po sobě jdoucí shodné znaky<br />
21 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Skupiny<br />
◮ (vzor) – se skupinami možno dále pracovat<br />
◮ Jednotlivé skupiny jsou číslovány (celý výraz má číslo 0)<br />
◮ \číslo – zopakování skupiny ve výrazu<br />
◮ (.)\1 – dva po sobě jdoucí shodné znaky<br />
◮ $číslo – použití skupiny při nahrazování<br />
◮ Replace "(.)(.)", "$2$1"<br />
21 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Skupiny<br />
◮ (vzor) – se skupinami možno dále pracovat<br />
◮ Jednotlivé skupiny jsou číslovány (celý výraz má číslo 0)<br />
◮ \číslo – zopakování skupiny ve výrazu<br />
◮ (.)\1 – dva po sobě jdoucí shodné znaky<br />
◮ $číslo – použití skupiny při nahrazování<br />
◮ Replace "(.)(.)", "$2$1" – prohození pořadí každých dvou znaků<br />
21 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Skupiny<br />
◮ (vzor) – se skupinami možno dále pracovat<br />
◮ Jednotlivé skupiny jsou číslovány (celý výraz má číslo 0)<br />
◮ \číslo – zopakování skupiny ve výrazu<br />
◮ (.)\1 – dva po sobě jdoucí shodné znaky<br />
◮ $číslo – použití skupiny při nahrazování<br />
◮ Replace "(.)(.)", "$2$1" – prohození pořadí každých dvou znaků<br />
◮ Skupiny je možné pojmenovat<br />
◮<br />
◮<br />
(?vzor) – pojmenování<br />
\ – definice vzoru<br />
◮ ${jmeno} – nahrazování<br />
21 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Další možnosti vyhledávání<br />
◮ vzor1|vzor2 – spojka nebo<br />
◮ (em|iv)a – ema nebo iva<br />
◮ ^ – začátek řetězce<br />
◮ $ – konec řetězce<br />
◮ \b – začátek/konec slova<br />
◮ \e[^\s]* – celé slovo (ukončené mezerou)<br />
22 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Opakování<br />
◮ * – opakování vzoru (0-n)<br />
◮ + – opakování vzoru (minimálně jednou)<br />
◮ ? – výskyt vzoru 0 nebo 1 krát<br />
◮ {počet} – pevný počet opakování<br />
◮ {min,max} – pevný počet opakování (rozmezí)<br />
◮ Příklad: ”mama ma maso”<br />
◮ (ma)* - mama ma maso<br />
◮ m.*m - mama ma maso<br />
◮ ma\s*ma - mama ma maso<br />
◮ ma\s+ma - mama ma maso<br />
◮ (ma.?){3} - mama ma maso<br />
23 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Regulární <strong>výrazy</strong> v .NETu<br />
◮ Namespace System.Text.RegularExpression<br />
◮ Třída Regex<br />
◮ obsahuje statické i nestatické metody<br />
◮ Match – vyhledá vzor a vrátí první výskyt<br />
◮ Matches – vyhledá vzor a vrátí všechny výskyty<br />
◮ IsMatch – zjistí zda se vzor v řetězci nachází<br />
◮ Split – podle vzoru rozdělí řetězec na pole řetězců<br />
◮ Replace – vyhledá vzory a nahradí je řetězcem<br />
◮ Pokud nejsou nutné <strong>regulární</strong> <strong>výrazy</strong>, použít metody třídy String<br />
◮<br />
◮<br />
◮<br />
IndexOf – vyhledání<br />
Split – rozdělení<br />
Replace – nahrazení<br />
24 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Možnosti nahrazování<br />
◮ Metoda Replace existuje v několika exemplářích<br />
◮ možnost definovat vlastní metodu, která bude provádět složitější<br />
operace<br />
static string NaKila ( Match m)<br />
{<br />
string cislo = m. Groups [1]. ToString ();<br />
int velikost = int . Parse ( cislo );<br />
velikost /= 1024;<br />
return velikost . ToString ()+ "kB";<br />
}<br />
...<br />
string vysledek = Regex . Replace (text , @"(\d+)B",<br />
new MatchEvaluator ( NaKila ));<br />
25 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
◮ \d{1,3}(\.\d{1,3}){3}<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
◮ \d{1,3}(\.\d{1,3}){3}<br />
◮ PSČ<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
◮ \d{1,3}(\.\d{1,3}){3}<br />
◮ PSČ<br />
◮ \d{3} ?\d{2}<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
◮ \d{1,3}(\.\d{1,3}){3}<br />
◮ PSČ<br />
◮ \d{3} ?\d{2}<br />
◮ email ( x.x@x.x.x )<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
◮ \d{1,3}(\.\d{1,3}){3}<br />
◮ PSČ<br />
◮ \d{3} ?\d{2}<br />
◮ email ( x.x@x.x.x )<br />
◮ [\w. -]+@[\w.-]+\.[a-zA-Z]{2,4}<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Pár příkladů na závěr<br />
◮ Rodné číslo ( 000000/000? )<br />
◮ \d{6}/\d{3,4}<br />
◮ IP adresa ( 0??.0??.0??.0?? )<br />
◮ \d{1,3}(\.\d{1,3}){3}<br />
◮ PSČ<br />
◮ \d{3} ?\d{2}<br />
◮ email ( x.x@x.x.x )<br />
◮ [\w. -]+@[\w.-]+\.[a-zA-Z]{2,4}<br />
◮ není 100% korektní<br />
◮ vyhledávání vs. testování<br />
26 / 27
Úvod Informace o prostředí Práce se soubory Regulární <strong>výrazy</strong> Konec<br />
Konec<br />
27 / 27