efun: escape_string


FUNKTION:

escape_string

DEKLARATION:

varargs string escape_string(string str, int mode)

BESCHREIBUNG:

Die Funktion fuegt Escape-Zeichen (\) nach verschiedenen Regeln in
den Eingabestring 'str' ein und liefert das Ergebnis zurueck. Die
verwendeten Regeln haengen von 'mode' ab.

Mit dieser Funktion lassen sich beliebige Strings in Regular Expressions
einbauen, auch wenn diese Sonderzeichen enthalten. Damit eignet sich diese
Funktion zum Beispiel auch fuer beliebige Spielereingaben.

Die Bestandteile des Bitflags 'mode' fuer Regular Expressions:

   ESCAPE_REGEXP:       (Default)
       Der zurueckgelieferte String ist ein regexp-Muster, das auf
       den Eingabestring 'str' passt.

   ESCAPE_PCRE:
       Anstelle von ESCAPE_REGEXP fuer PCRE-kompatible Patterns.

   ESCAPE_ANY:          (Default)
       Das zurueckgelieferte Muster passt auf beliebige Teilstrings.

   ESCAPE_EXACT:
       Das zurueckgelieferte Muster muss auf den kompletten String passen.

   ESCAPE_WORD:
       Das zurueckgelieferte Muster muss auf ein Wort passen.

   ESCAPE_CASE:         (Default)
       Das zurueckgelieferte Muster beachtet Gross- und Kleinschreibung.

   ESCAPE_NOCASE:
       Das zurueckgelieferte Muster ignoriert Gross- und Kleinschreibung.

   ESCAPE_LISTE:
       Das zurueckgelieferte Muster beachtet durch Kommata getrennte Listen.
       Wenn man sich selbst um die Trennung kuemmern moechte, kann man statt
       einem String auch ein String-Array uebergeben.

   ESCAPE_WILDCARD:
       Das zurueckgelieferte Muster beachtet einfache Wildcards:

           ?   steht fuer ein beliebiges einzelnes Zeichen
           *   steht fuer beliebig viele (oder keine) Zeichen

       Die Wildcards duerfen im Eingabestring selbst escaped werden.

          \?   steht fuer ?
          \*   steht fuer *

Weitere Werte fuer 'mode', die nicht kombinierbar sind:

   ESCAPE_REPLACE:
       Es wird kein Muster, sondern ein Replacepattern zurueckgeliefert.
       Damit setzt regreplace() genau den Eingabestring ein, auch wenn
       dieser Sonderzeichen enthaelt.

   ESCAPE_GETDIR:
       Der zurueckgelieferte String matcht Dateien bei get_dir()
       exakt der Eingabe, Wildcards und Escapes werden ignoriert.

BEISPIELE:
    escape_string("(foo|bar)")
        -> Das Muster passt auf "(foo|bar)", "bla (foo|bar) bla"

    escape_string("(foo|bar)", ESCAPE_PCRE)
        -> Dasselbe, jedoch fuer PCRE.

    escape_string("(foo|bar)", ESCAPE_EXACT)
        -> Das Muster passt ausschliesslich auf "(foo|bar)".

    escape_string("bla*", ESCAPE_WILDCARD)
        -> Das Muster passt auf "bla", "blafasel", "/pfad/zum/blablubb"

    escape_string("bla*", ESCAPE_WILDCARD|ESCAPE_EXACT)
        -> Jetzt passt das Muster nicht mehr auf "/pfad/zum/blablubb"

    escape_string("\\1&\\2&\\3", ESCAPE_REPLACE)
        -> Als replacepattern verwendet, wird \1&\2&\3 eingesetzt.

    escape_string("tisch, stuhl, sofa", ESCAPE_LISTE)
        -> Das Muster passt auf tisch oder stuhl oder sofa,
           aber auch auf holztisch, stuhlbein und ledersofa.

    escape_string("tisch, stuhl, sofa", ESCAPE_LISTE|ESCAPE_CASE|ESCAPE_WORD)
        -> Das Muster passt auf Tisch oder Stuhl oder Sofa,
           jedoch nicht mehr auf Holztisch, Stuhlbein und dergleichen.
           Zudem ist die Gross- und Kleinschreibung in diesem Beispiel egal.

    escape_string("", ESCAPE_LISTE)
    escape_string(" ", ESCAPE_LISTE)
    escape_string(" , ,,,", ESCAPE_LISTE)
        -> Es handelt sich um leere Listen, der Rueckgabewert ist 0.

VERWEISE:

regexp, regreplace, get_dir

GRUPPEN:

string, simul_efun

SOURCE:

/secure/simul_efun/string.i

UNItopia (mudadm@UNItopia.de)