Přeskočit obsah

Výrazy pro řetězce¤


!IN: Testuje, zda řetězec obsahuje podřetězec¤

Výraz !IN slouží ke kontrole, zda řetězec what je podřetězcem where, nebo ne.

Typ: Mapping.

Synopsis:

!IN
what: <...>
where: <...>

Pokud najde podřetězec what v řetězci where, vyhodnotí se jako true, v opačném případě jako false.

Příklad

!IN
what: "Willy"
kde: "John Willy Boo"

Zkontroluje přítomnost podřetězce "Willy" v hodnotě where. Vrátí hodnotu true.

Varianta pro více řetězců¤

Existuje speciální varianta operátoru !IN pro kontrolu, zda je některý z řetězců uvedených v hodnotě what (v tomto případě seznam) v řetězci. Jedná se o efektivní, optimalizovanou implementaci víceřetězcového matcheru.

!IN
what:
  - "John"
  - "Boo"
  - "ly"
where: "John Willy Boo"

Jedná se o velmi efektivní způsob kontroly, zda je v řetězci where přítomen alespoň jeden podřetězec. Podporuje Incremental String Matching algoritmus pro rychlé porovnávání vzorů v řetězcích. Díky tomu je ideálním nástrojem pro komplexní filtrování jako samostatný bit nebo jako optimalizační technika.

Příklad optimalizace !REGEX pomocí víceřetězcového !IN:

    !AND
    - !IN
      where: !ARG message
      what:
      - "msgbox"
      - "showmod"
      - "showhelp"
      - "prompt"
      - "write"
      - "test"
      - "mail.com"
    - !REGEX
      what: !ARG message
      regex: "(msgbox|showmod(?:al|eless)dialog|showhelp|prompt|write)|(test[0-9])|([a-z]@mail\.com)

Tento přístup se doporučuje z aplikací v proudech, kde je třeba filtrovat rozsáhlé množství dat s předpokladem, že pouze menší část dat odpovídá vzorům. Přímá aplikace výrazu !REGEX výrazně zpomalí zpracování, protože se jedná o složitý regulární výraz. Jde o to "předfiltrovat" data jednodušší, ale rychlejší podmínkou tak, aby se k drahému !REGEX dostal jen zlomek dat. Typické zlepšení výkonu je 5x-10x.

Z tohoto důvodu musí být !IN dokonalou nadmnožinou !REGEX, to znamená:

  • !IN -> true, !REGEX -> true: true
  • !IN -> true, !REGEX -> false: false (to by měla být menšina případů).
  • !IN -> false, !REGEX -> false: false (předfiltrování, mělo by se jednat o většinu případů)
  • !IN -> false, !REGEX -> true: této kombinaci se MUSÍTE vyhnout, podle toho přijměte !IN a/nebo !REGEX.

!STARTSWITH: Otestuje, zda řetězec začíná předponou¤

Vrací hodnotu true, pokud řetězec what začíná předponou prefix.

Typ: Mapping

Synopsis:

!STARTSWITH
what: <...>
prefix: <...>

Příklad

!STARTSWITH
what: "FooBar"
prefix: "Foo"

Víceřetězcová varianta¤

Work in progress

Zatím neimplementováno.

!STARTSWITH
what: <...>
prefix: [<prefix1>, <prefix2>, ...]

Ve víceřetězcové variantě je definován seznam řetězců. Výraz se vyhodnotí jako true, pokud alespoň jeden prefixový řetězec odpovídá začátku řetězce what.


!ENDSWITH: Testuje, zda řetězec končí příponou¤

Vrací hodnotu true, pokud řetězec what končí příponou postfix.

Typ: Mapping

Synopsis:

!ENDSWITH
what: <...>
postfix: <...>

Příklad

!ENDSWITH
what: "autoexec.bat"
postfix: "bat"

Víceřetězcová varianta¤

Work in progress

Zatím neimplementováno.

!ENDSWITH
what: <...>
postfix: [<postfix1>, <postfix2>, ...]

Ve víceřetězcové variantě je definován seznam řetězců. Výraz se vyhodnotí jako true, pokud alespoň jeden postfixový řetězec odpovídá konci řetězce what.


!SUBSTRING: Extrahuje část řetězce¤

Vrátí část řetězce what mezi indexy from a to.

Typ: Mapping

Synopsis:

!SUBSTRING
what: <...>
od: <...>
do: <...>

Info

První znak řetězce se nachází na pozici from=0.

Příklad

!SUBSTRING
what: "FooBar"
from: 1
do: 3

Vrací oo.


!LOWER: Převede řetězec na malá písmena¤

Typ: Mapping

Synopsis:

!LOWER
what: <...>

Příklad

!LOWER
what: "FooBar"

Vrací foobar.


!UPPER: Převede řetězec na velká písmena¤

Typ: Mapping

Synopsis:

!UPPER
what: <...>

Příklad

!UPPER
what: "FooBar"

Vrací FOOBAR.


!CUT: Vyjmout část řetězce¤

Rozdělí řetězec oddělovačem a vrátí část identifikovanou indexem field (začíná 0).

Typ: Mapping

Synopsis:

!CUT
what: <string>
delimiter: <string>
field: <int>

Řetězec argumentu value bude rozdělen pomocí argumentu delimiter. Argument field určuje počet rozdělených řetězců, které se mají vrátit, počínaje 0.
Pokud je uveden záporný údaj field, pak se pole bere od konce řetězce, například -2 znamená předposlední podřetězec.

Příklad

!CUT
what: "Apple,Orange,Melon,Citrus,Pear"
delimiter: ","
field: 2

Vrátí hodnotu "Melon".

Příklad

!CUT
what: "Apple,Orange,Melon,Citrus,Pear"
delimiter: ","
field: -2

Vrátí hodnotu "Citrus".


!SPLIT: Rozdělí řetězec do seznamu¤

Rozdělí řetězec na seznam řetězců.

Typ: Mapping

Synopsis:

!SPLIT
what: <string>
oddělovač: <string>
maxsplit: <number>

Řetězec argumentu what bude rozdělen pomocí argumentu delimiter. Nepovinný argument maxsplit určuje, kolik rozdělení se má provést.

Příklad

!SPLIT
what: "hello,world"
delimiter: ","

Výsledkem je seznam: ["hello", "world"].


!RSPLIT: Rozdělí řetězec do seznamu zprava¤

Rozdělí řetězec zprava (od konce řetězce) do seznamu řetězců.

Type: Mapping

Synopsis:

!RSPLIT
what: <string>
delimiter: <string>
maxsplit: <number>

Argument what se rozdělí podle delimeter. Nepovinný argument maxsplit určuje, kolik rozdělení se má provést.


!JOIN: Spojí seznam řetězců¤

Typ: Mapping

Synopsis:

!JOIN
items:
  - <...>
  - <...>
delimiter: <string>
miss: ''

Výchozí delimiter je mezera (" ").

Pokud je položka None, použije se hodnota parametru miss, ve výchozím nastavení je to prázdný řetězec. Pokud je miss None a některá z položek items je None, výsledkem celého spojení je None.

Příklad

!JOIN
items:
  - "Foo"
  - "Bar"
delimiter: ','