Cvičení - 08 - regulární výrazy
Výroba regulárního výrazu krok za krokem
Po řadě vyrobte regulární výraz, jenž bude odpovídat:
- Telefonnímu číslu devět číslic bez mezer a předvoleb. ''např: 605777278''
- Telefonnímu číslu devět čísel s mezerami ''např: 605 777 278''
- Oběma předchozím situacím
- Předchozímu, ovšem s možností uvedení předvolby +420. Regexp by měl tedy nyní odpovídat případům: ''+420605777278'', ''605 777 278'' i ''+420 605 777 278''
- Předchozímu, ovšem předvolba může být obecná: seznam telefonních předvoleb. Dostáváme se na kraj možností regexpu - některé kombinace předvoleb, čísel a mezer se odchytit nedají, aniž byste zároveň povolili i nesprávné kombinace.
Při každém kroku si zkuste vyzkoušet i případy, kterým by regexp odpovídat ''neměl'' - a pokud jim odpovídá, asi jste byli příliš obecní.
Napište regulární výraz, který odpovídá:
- Řádku který má na začátku písmeno d
- Prázdnému řádku
- Řádku přesně se třemi znaky
- Slovům, které začínají jedním písmenem 'a', následuje libovolný počet písmen 'b' a potom jedno písmeno 'c'.
- Slovům ''kop''', ''kap'', ''kyp'' (a jiným ne)
- Dvěma písmenkům a jedné až třem číslicím. (např. ab123, xy1, um56)
- Slovům, které obsahují dvojhlásky (tedy dvě shodná písmenka). Např: ''aaron'', ''pootoc'', ''beer''. Použijte zpětnou referenci.
- Obsahu html tagu <a>. Tedy textu ODKAZ v řetězci <a href="http://google.com">ODKAZ</a>. Uvnitř tagu <a> se nenalézají žádné podtagy.
| Řešení:
echo 'Neco <a href="http://google.com">ODKAZ53</a> neco'| sed -e 's/^.*<a[^>]*>\([^<]*\)<\/a>.*$/\1/'
Prakticky:
- Z výpisu ''ls -la'' vyberte všechny podadresáře současného adresáře a zobrazte jejich názvy.
Pokročilé:
Pokročilé: Zkuste vytvořit příkaz sedu, jenž nám pro řádku s ulicí v adrese jednotlivé složky vypíše - ULICE:...,CISLO ORIENTACNI:..., CISLO POPISNE:...
Příklady vstupů:
- ''Mejzlíkova 117''
- ''Květinová 25''
- ''Květinová 3450/25''
- ''Náměstí 17.listopadu 25''
- ''9. května 890/13''
''Poznámka:''
- Pokud je na konci jedno čislo, je to číslo orientační (v Praze modré) - udává pořadí domu v ulici.
- Číslo popisné (v Praze červené) je pořadí domu ve čtvrti (tedy většinou odpovídá pořadí, jako kolikátý byl dům postaven)
- Orientační číslo bývá nižší (ale nejde se na to spolehnout)
- Pokud se uvádí čísla obě, jsou oddělena lomítkem: #popisné/#orientační, pokud se číslo uvádí jedno, spolehněte se, že jde o orientační (diskriminujme venkov).
''Poznámka:''
- Diakritiku tradičně zanedbejte