Regulární výrazy 2

43. hodina MVOP WBF

Matěj Cajthaml — SSPŠ

©

Opakování

Co vybere následující regulární výraz?

  • /[a-z]+/
  • /[a-z]+/g
  • /[a-z]+/i
  • /(+420)? ?([0-9] ?){3}/gi

Zástupné znaky

Zástupné znaky

  • = tokeny, meta sekvence
  • sekvence znaků se speciální významem
  • často nějaké zkratky

Meta sekvence

  • . — vybere jeden jakýkoliv znak
  • \s — jakýkoliv whitespace znak
  • \S — opak \s
  • \d — jeden znak
  • \D — opak \D
  • \w — znak, který se může objevit ve slově

Regulární výrazy

Práce

Co zbyde v řetězci pro aplikaci nahrazení za - ve vstupu Kočka #302, které je 5,
je tu proto, aby tu byla.
pro níže uvedené výrazy?

  1. /.*/g
  2. /\d+/g
  3. /\w+/g

Pokročilé rozmezí

Jaký je rozdíl mezi (a|b) a [ab]?

Negace rozmezí

  • znegujeme znaky či rozmezí
  • vše až na dané výjimky
  • [^xyz] — cokoliv až na x, y a z
  • [^5-8] — cokoliv až na 5, 6, 7 a 8

Další rozmezí

  • [[::ascii::]]
  • [[::lower::]]
  • a další...

Dříve uvedené rozmezí v JS nefungují. Proč?

Pokročilé skupiny

Zrušení seskupení

  • chceme opakování dané části bez toho, abychom ji měli ve výběru
  • /(?:to co chceme neseskupovat)/g

Podmínky

  • vybereme, jestli něco je před nebo za prvkem
  • několik variant:
    • test(?= to je) — vybere test, pokud se za ním nachází to je
    • (?<=test)není — vybere není, pokud se před ním nachází test
    • a další...

Zamezení

Začátek a konec stringu

  • ^ — označuje začátek stringu
  • $ — označuje konec stringu

  • ^ad$ — celá kontrola musí být rovna tokenu ad

Jak se chovají znaky ^$ společně s modifikátorem m?

Word boundaries

  • metaznaky
  • nezachytávají žádné znaky, ale jejich pozice
  • \b — místo, kde končí či začíná slovo
  • \B — místa, kde \b nevybere
  • např. /\bkočička\b/g

Regulární výrazy

Práce

Co zbyde v řetězci pro aplikaci nahrazení za - ve vstupu Kočka #302, které je 5,
je tu proto, aby tu byla.
pro níže uvedené výrazy?

  1. /(?:\b\w+\b)+/g
  2. /(?:\B\w+\B)+/g

Chování tokenů

Lazy vs. greedy

  • některé tokeny jsou greedy, to znamená, že chtějí označit samo sebou co nejvíce znaků
  • to nechceme a proto můžeme říct, aby to zkusili co nejméněkrát, aby byly ostatní skupiny naplněny
  • a\w*? — označ co nejméně a

  • backtracking problém

Regulární výraz

Práce

Co znamená regulární výraz /<[^<>]+>/gm?

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/