Suchen, Ersetzen und reguläre Ausdrücke, Teil 2

28. Februar 2009, 16:21

Diese Funktion führt eine Suchen&Ersetzen-Aktion auf einem Text aus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function searchReplace($search, $replace, $txt, &$hits = array()) {
  $matches   = array();
  $sItems    = array();
  $rItems    = array();
  $mCounter  = 0;
  $rCounter  = substr_count($replace, '%s');
  $replace   = str_replace('%s', '%1$s', $replace);
 
  preg_match_all($search, $txt, $matches, PREG_OFFSET_CAPTURE);
  $matches   = $matches[0];
  $mCounter  = count($matches);
 
  if($mCounter > 0) {
    for($i = 0; $i < $mCounter; $i++) {
      $sItems[$i] = substr($txt, $matches[$i][1], strlen($matches[$i][0]));
      $hits[$i]   = $sItems[$i];
      $rItems[$i] = sprintf($replace, $sItems[$i]);
    }
    $txt = str_replace($sItems, $rItems, $txt);
  }
 
  return $txt;
}

Als erster Parameter wird ein regulärer Audruck erwartet.
Der zweite Parameter ist eine Zeichenkette, mit der die gefundenen Werte ersetzt werden sollen. Enthält die Zeichenkette die Formatierungsanweisung ‘%s’ (Beschreibung siehe sprintf), so wird jedes Vorkommen dieser Anweisung durch den gefundenen Wert ersetzt.
Als dritter Parameter erwartet die Funktion den Text, auf dem die Aktion ausgeführt werden soll.
Der vierte Parameter ist optional. Dabei kann ein Array per Referenz übergeben werden, das nach der Ausführung der Aktion die gefundenen Werte enthält.

Suchen, Ersetzen und reguläre Ausdrücke, Teil 1

22. Februar 2009, 23:57

Habe hier ein paar reguläre Ausdrücke für verschiedene Textwerte zusammengetragen, die ich während der Programmierung oft verwende. Natürlich könnte man diese noch weiter verfeinern, doch für meine Bedürfnisse waren sie bisher ausreichend.

Dezimalzahl:

'/^[0-9]*$/'

Textfeld:

'/^[a-zA-Z .-]*$/'

E-Mail:

"/^[a-z0-9]+([_\\.-][a-z0-9]+)*" . "@" . "([a-z0-9]+([\.-][a-z0-9]+)*)+" . "\\.[a-z]{2,4}" . "$/"
"'/[a-zA-Z0-9_-]?[a-zA-Z0-9_\.-]+[a-zA-Z0-9_-]?@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}/"

Datum:

'/^\d{2}\.\d{2}\.\d{2,4}$/'

Telefon:

"/[^+-\/0-9 ()]/"

Wer sich ein wenig mit regulären Ausdrücken beschäftigen möchte, findet hier ein sehr gutes Tutorial zu dem Thema.