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:

  1. Telefonnímu číslu devět číslic bez mezer a předvoleb. ''např: 605777278''
  2. Telefonnímu číslu devět čísel s mezerami ''např: 605 777 278''
  3. Oběma předchozím situacím
  4. 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''
  5. 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á:

| Řešení:

echo 'Neco <a href="http://google.com">ODKAZ53</a> neco'| sed -e 's/^.*<a[^>]*>\([^<]*\)<\/a>.*$/\1/'


Prakticky:



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