Hallo, hab ein array und will jezt alle datensätze
rausfiltern, die folgend aufgabuat sind:
1.: irgendwelche Zeichen (mehr als 0 Zeichen)
2.: {{RROW}}
4.: irgendwelche Zeichen (mehr als 0 Zeichen)
5.: {{WORR}}
6.: irgendwelche Zeichen (mehr als 0 Zeichen)
Wie geht das. Hatte es hiermit versucht:
preg_grep(’/(.+{{RROW}}.+{{WORR}}.+)/’,$var);
Hi,
preg_grep durchsucht die Elemente des Arrays einzeln, also kann es gar nicht vergleichen, was im Element vorher stand, leider.
Du kannst jetzt folgendes versuchen:
Entweder, du reihst alle deine Array-Elemente mit einem String zusammen, der garantiert in keinem der Elemente vorkommt, wendest dann deine Regexp mit preg_replace an und machst hinterher wieder ein Array draus. Das sieht dann so aus:
$deinArray = array(‚erstens‘, ‚sdsdsdad‘, ‚{{RROW}}‘, ‚sadlkajd‘, ‚{{WORR}}‘, ‚gugru‘, ‚zweitens‘);
$sep = ‚#####‘; // Benutze hier Regex-Sonderzeichen nur in maskierter Form!
$langerString = $sep . implode($sep, $deinArray) . $sep;
// Achtung: $sep darf natürlich im Array nicht vorkommen.
// Tut er’s doch, nimm 'nen anderen
$pattern = ‚/‘ . $sep . ‚[^(‘ . $sep . ‚)]+‘ . $sep . ‚{{RROW}}‘ . $sep . ‚[^(‘ . $sep . ‚)]+‘ . $sep . ‚{{WORR}}‘ . $sep . ‚[^(‘ . $sep . ‚)]+‘ . $sep . ‚/‘;
$langerString = preg_replace($pattern, $sep, $langerString);
// Jetzt die zusätzlichen $sep an Stringanfang und Ende wieder entfernen
$langerString = preg_replace(’/^’ . $sep . ‚(.*)‘ . $sep . ‚$/‘, ‚${1}‘, $langerString);
$neuesArray = explode($sep, $langerString);
print_r($neuesArray);
Hab’ den ganzen Nachmittag an dem Ausdruck gesessen weil’s mit den negierten Zeichenmengen erst nicht klappen wollte, hab’ mich da wohl vertippt. Dumm, aber aufgeben war auch nicht.
Das hier sollte gehen, aber bitte erst genau testen!
Warum und wieso gerade so (vorallem mit so 'nem Monster von RexEx erklär ich gern auf Anfrage. Ein Tipp: Es liegt daran, dass RegExps „gierig“ sind…
…Oder du vergleichst die Array-Elemente einzeln mit einem Teil der Regex. Wenn du einen „{{RROW}}“ oder „{{WORR}}“ Eintrag gefunden hast überprüfst du manuell, ob die Elemente davor und danach den übrigen Bedingungen entsprechen und löscht dann raus.