SetaPDF
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 25.09.2007, 19:57   #1
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE

Regex: Zusammenhängenden String suchen und ersetzten


Hi @all!

Entweder hab ich gerade ein Brett vorm Kopf oder es ist wirklich kniffelig... Folgendes:

Ich habe eine Art Suchstring aus einem oder mehrerer Wörter. Dieser Suchstring soll in einem vorhandenen String erkannt werden und falls er gefunden wurde, soll er entfernt werden.

Das Problem besteht allerdings, darin, dass der Suchstring auch ein Teil eines Wortes sein kann - dieser soll aber NICHT matchen.

Folgende mal ein kleines Script zum Testen. Die Roten stellen sollen ersetzt werden. Alle anderen vorkommen von "AIRBAG" sollten nicht matchen.
Code:
<xmp>
<?php

$text[] = 'Ford-Citroen-BMW-vw/setasign/ABS-SeitenAIRBAGs-AIRBAG-Klima-Regensensor-Parktronic-Skisack'; 
$text[] = 'Ford-Citroen-BMW-vw/setasign/AIRBAG-ABS-SeitenAIRBAGs-Klima-Regensensor-Parktronic-Skisack'; 
$text[] = 'Ford-Citroen-BMW-vw/setasign/ABS-SeitenAIRBAGs-Klima-Regensensor-Parktronic-Skisack-AIRBAG; 
$text[] = 'AIRBAG-ABS-SeitenAIRBAGs-Klima-Regensensor-Parktronic-Skisack'; 
$text[] = 'Super AIRBAG-AIRBAG-Super AIRBAG-Super AIRBAG'; 
$text[] = 'AIRBAG-AIRBAG Test/Jaja'; 
$text[] = AIRBAG; 
print_r($text);

$searchFor = 'AIRBAG';

$patterns = array();
$patterns[] = '~^'.$searchFor.'$~iu'; // nur mal als Anfang...

foreach ($text AS $k => $v) {
    foreach ($patterns AS $pattern) {
        if (preg_match($pattern, $text[$k], $m)) {
            $text[$k] = preg_replace($pattern, '', $text[$k]);
            break;
        }
    }
}

print_r($text);
Ich hatte schon diverse Pattern, aber alle hatten irgendwelche Probleme oder es kam mir einfach komisch vor so viele patterns drüberlaufen zu lassen...

Hat jemand ne Idee?

Danke und Gruß
Jan

Geändert von Stuck Mojo (25.09.2007 um 20:11 Uhr).
Stuck Mojo ist offline   Mit Zitat antworten


Alt 25.09.2007, 20:18   #2
TP-Special Mod
 
Benutzerbild von webmichl
 
Registriert seit: Jun 2001
Ort: 8°21' O 49°1' N
webmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine User
Hast Du schon mit der Wortgrenze \b experimentiert? Also \bAIRBAG\b?
__________________

webmichl ist gerade online   Mit Zitat antworten
Alt 25.09.2007, 20:20   #3
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Zitat:
Zitat von webmichl Beitrag anzeigen
Hast Du schon mit der Wortgrenze \b experimentiert? Also \bAIRBAG\b?
ja... wobei diese Konstrukte dann Probleme machen:
Code:
$text[] = 'Super AIRBAG-AIRBAG-Super AIRBAG-Super AIRBAG';
Stuck Mojo ist offline   Mit Zitat antworten
Alt 25.09.2007, 20:25   #4
TP-Special Mod
 
Benutzerbild von webmichl
 
Registriert seit: Jun 2001
Ort: 8°21' O 49°1' N
webmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine Userwebmichl lebt für das TP und seine User
stümmt - die hatte ich übersehen...

Wobei das Konstrukt ja eh der Hammer ist - da wirst Du glaube ich keine Lösung finden...
__________________

webmichl ist gerade online   Mit Zitat antworten
Alt 25.09.2007, 20:43   #5
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Also so scheints zu gehen:
Code:
$patterns[] = array('~([-/])'.$searchFor.'([-/])~iu', '\\1\\2');
$patterns[] = array('~^'.$searchFor.'([-/])~iu', '\\1');
$patterns[] = array('~([-/])'.$searchFor.'$~iu', '\\1');
$patterns[] = array('~^'.$searchFor.'$~iu', '');

foreach ($text AS $k => $v) {
    foreach ($patterns AS $pattern) {
        if (preg_match($pattern[0], $text[$k], $m)) {
            $text[$k] = preg_replace($pattern[0], $pattern[1], $text[$k]);
            break;
        }
    }
}
...aber das muss doch auch einfacher gehen? *grml* Des Weiteren wollte ich eigentlich mit Assertions arbeiten um die Replace-Dinger zu vermeiden... hast du dazu eine Idee?

Gruß
Jan
Stuck Mojo ist offline   Mit Zitat antworten
Alt 25.09.2007, 23:17   #6
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Hi Jan,

ich versteh noch nicht wo es matchen soll und wo nicht.
Soll es nur wenn ein Zeichen -/ vor oder nach kommt oder es am Anfng/Ende steht, aber nie wenn ein Leerzeichen vor oder nach kommt?
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 25.09.2007, 23:24   #7
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
genau! Als Wortbegrenzer sind sozusagen folgende Dinge anzusehen: Stringanfang, Stringende, \ order -

Diese 4 Dinge müssen gegeben sein, damit es matched.
Stuck Mojo ist offline   Mit Zitat antworten
Alt 26.09.2007, 00:14   #8
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
dann können Deine Patterns aber nicht stimmen, denn Du suchst ja auch nach einseitigen Begrenzern.
ist - in der Zeichenklasse nicht zu maskieren?
Kannst Du das nicht in einem Pattern zusammenfassen, etwa so?
$pattern = '@^AIRBAG || ([-/])AIRBAG([-/]) || ^AIRBAG$@iu';

sry, aber bei regEx muss ich mit try&error arbeiten
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 26.09.2007, 09:33   #9
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Zitat:
Zitat von steffenk Beitrag anzeigen
dann können Deine Patterns aber nicht stimmen, denn Du suchst ja auch nach einseitigen Begrenzern.
ist - in der Zeichenklasse nicht zu maskieren?
Kannst Du das nicht in einem Pattern zusammenfassen, etwa so?
$pattern = '@^AIRBAG || ([-/])AIRBAG([-/]) || ^AIRBAG$@iu';

sry, aber bei regEx muss ich mit try&error arbeiten
ehh... von try seh ich was aber von error noch viel mehr Nene... das brauch' ich noch nichtmal probieren!

Meine Pattern stimmen soweit. Die "einseitigen Begrenzer" sind für die Suche zu Beginn oder am Ende des Strings.
Stuck Mojo ist offline   Mit Zitat antworten
Alt 26.09.2007, 10:00   #10
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
ja, das das fehlerhaft ist weiss ich, wollt Dich nur auf andere Ideen bringen
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Regex: Zusammenhängenden String suchen und ersetzten Regex: Zusammenhängenden String suchen und ersetzten
« Zeilenumbruch bei Tabellen im DIV | String nach einem Wort durchsuchen »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:08 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67