-
Frage zu RegEx [gelößt]
Hallo Leute,
folgende Methode filtert einen vom Nutzer eingegebenen Text.
PHP-Code:
/**
* Hilfsfunktion um den vom Nutzer eingegebenen Text zu korrigieren.
* @param type $text
* @return type
*/
function textKorrektur($text) {
// echo '--> textKorrektur<br>';
$zeichenkette = $text;
$suchmusterContainer = ["[^']" => '', "['$]" => '', '[\s+]' => ' ', '["]' => "'", '[\s$]' => '', '[-]' => "/",];
foreach ($suchmusterContainer as $suchmuster => $ersetzung) {
$zeichenkette = preg_replace($suchmuster, $ersetzung, $zeichenkette);
}
// echo 'textKorrektur --><br>';
return $zeichenkette;
}
Im letzten Schritt:
werden alle "Minus"-Zeichen in einen "/" umgewandelt.
Jetzt benötige ich aber folgendes.
Es sollen, wie gehabt, alle Minuszeichen in einen "/" umgewandelt werden, außer wenn die Minuszeichen in einer Klammer stehen --> (-) <-- .
Auf folgenden Seiten habe ich bisher nachgesehen.
- https://www.phpliveregex.com/
- https://ahkde.github.io/docs/misc/RegEx-QuickRef.htm
Hat jemand einen Tipp für mich?
Gruß
tschero
-
Negative Lookahead (oder Lookbehind) im RegEx sollte Dein Freund sein.
Also wahrscheinlich in etwa so:
mit der Klammer ) als \) "escaped".
Das allgemeine Muster für "ein x nicht gefolgt von einem y" wäre
-
Moin fiedsch,
genau das hab ich gesucht. Funktioniert sehr gut. Die Anweisung deckt momentan alles ab was ich benötige.
PHP-Code:
/**
* Hilfsfunktion um den vom Nutzer eingegebenen Text zu korrigieren.
* @param type $text
* @return type
*/
function textKorrektur($text) {
// echo '--> textKorrektur<br>';
$zeichenkette = $text;
//Mehrere Leerzeichen hintereinander zu einem Leerzeichen
//und alle doppelten Anfuehrungszeichen zu einfachen Anfuehrungszeichen
// und alle Bindestriche zu "Slash" wenn die Bindestriche nicht in einer Klammer stehen
$suchmusterContainer = ["[^']" => '', "['$]" => '', '[\s+]' => ' ', '["]' => "'", '[\s$]' => '', '[-(?!\))]' => "/"];
foreach ($suchmusterContainer as $suchmuster => $ersetzung) {
$zeichenkette = preg_replace($suchmuster, $ersetzung, $zeichenkette);
}
// echo 'textKorrektur--><br>';
return $zeichenkette;
}
Herzlichen Dank für die Hilfe.
Gruß
tschero