Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame^] | 1 | SYNOPSIS
|
| 2 | string regreplace(string txt, string pattern,
|
| 3 | string|closure replacepattern, int flags)
|
| 4 |
|
| 5 | BESCHREIBUNG
|
| 6 | Die Funktion durchsucht den String txt nach einem Vorkommen
|
| 7 | des regulaeren Ausdrucks pattern, und ersetzt ihn durch
|
| 8 | den String replacepattern. (replacepattern kann auch eine Closure
|
| 9 | sein. Sie bekommt als argument den passenden Substring und muss
|
| 10 | den Ersatzstring zurueckliefern.)
|
| 11 |
|
| 12 | Im replacestring kann man via '&' auf den zum Suchausdruck
|
| 13 | passenden Teilstring im Original zugreifen. Mit \n (wobei n
|
| 14 | eine Ganzzahl ist) kann man auf den n-ten Unterausdruck
|
| 15 | des regulaeren Ausdrucks zugreifen. Um "&" oder "\\1" als
|
| 16 | Ersetzung zu erreichen, muss "\\&" bzw "\\\\1" verwendet werden.
|
| 17 |
|
| 18 | Beim Flag bestimmt ein gesetztes Bit 0, dass der Ausdruck so oft
|
| 19 | wie vorhanden ersetzt wird, sonst nur das erste Auftreten.
|
| 20 | Bit 1 bestimmt, ob der regulaere Ausdruck 'ed' oder 'sed' kompatibel
|
| 21 | ist (Bit geloescht) oder 'ex' kompatibel (gesetzt).
|
| 22 |
|
| 23 | Die Funktion wirkt wie s/pattern/replacepattern/flags in
|
| 24 | Editoren wie vi oder sed. Sie ist besonders gut geeignet um
|
| 25 | variable Strings zu ersetzen, im Gegensatz zu regexplode, wo
|
| 26 | man den String nur nach einem regulaeren Ausdruck zerlegen kann.
|
| 27 |
|
| 28 | BEISPIELE
|
| 29 | string msgin;
|
| 30 |
|
| 31 | /* Sucht nach 'teilt Dir mit: ' und schliesst den nachfolgenden
|
| 32 | ** Text mit <underline> und </underline> ein; bei jedem Auftreten.
|
| 33 | */
|
| 34 | msgin = regreplace(msgin, "teilt Dir mit: (.*)",
|
| 35 | "teilt Dir mit: <underline>\\1</underline>", 1);
|
| 36 |
|
| 37 | /* Ersetzt die <underline> html-Tags durch die vt100
|
| 38 | ** Escape-Sequenzen fuer Unterstreichung
|
| 39 | */
|
| 40 | txt = regreplace(txt, "<underline>", "<ESC>[5m", 1);
|
| 41 |
|
| 42 | /* Ersetzt das Wort HOUSE in Kleinbuchstaben. */
|
| 43 | txt = regreplace(txt, "HOUSE",
|
| 44 | function string (string s) {return lower_case(s);},
|
| 45 | 1);
|
| 46 |
|
| 47 | AUTOR
|
| 48 | Marcus@TAPPMud schrieb die Original-efun (und die englische Manpage).
|
| 49 |
|
| 50 | SIEHE AUCH
|
| 51 | regexp(E), regexplode(E), sscanf(E)
|