Hi an alle (vermutlich eher an die PHP-Cracks unter Euch ),
in meinem Project Exporter habe ich u.A. eine Funktion, die Scripte nach 5stelligen Zahlen durchsucht, die größer 9999 und kleiner 60.000 sind (genauer: IPS-Obkjekt ID’s).
Das funktioniert mit fogendem Search-Pattern und preg_match() ziemlich gut:
Blöderweise werden hin- und wieder auch Strings gefunden, in denen zwar 5-stellige Zahlen enthalten sind, diese Strings haben aber nichts mit der IPS-ID zu tun.
Beliebte Beispiele sind Modul-ID’s (57040540-4432-4220-8D2D-4676B57E223D) oder Farbcodes (#656565). Hat jemand ne Idee, wie man Suchergebnisse ausschließen kann, deren Strings Formate wie die in den Beispielen genannten haben?
Ich kau da schon ne Weile drauf rum, aber was Gescheites hab ich bisher noch nicht ausgebrütet.
Wäre super, wenn mir jemand beim Brüten helfen kann
also mal so frei aus dem Kopf müsste folgendes Pattern das gewünschte liefern:
/([1-6][0-9]{4})[^0-9]/
sollte heißen: Ausdruck, beginnt mit Ziffer 1-6, dann folgen 4 Ziffern zwischen 0 und 9 und abschießen muss der Ausdruck mit allem, nur nicht mit den Ziffern 0 bis 9. Die Klammen greifen dabei den gesuchten 5-Stelligen Zahlenwert ab.
nochmal vielen dank fürs Mitdenken Ich bin einen wesentlichen Scritt weiter: die runde Klammer war das, was mir vom Verständnis her noch fehlte.
der hier: /([1-6][0-9]{4})[^0-9]/ ist schon ziemlich dicht dran, lässt aber
in solchem String
{57040540-4432-4220-8D2D-4676B57E223D}
noch 40540 durchrutschen (wirt den als Positiv-Ergebnis aus) .
ich hab jetzt etliche Tests gemacht und mich an folgenden Pattern herangerobbt:
Ich weiss ja nun nicht, was Du wirklich haben wolltest, aber mit dem folgenden Snippet er genau die 5 Stelligen Ziffern bei mir. Es sollte Dir die Nutzung des \b (Wortgrenzen Operator) zeigen
function regex_test($subject) {
if (preg_match('/\b[1-5][0-9]{4}\b/', $subject,$result)) {
print_r ($result);
}
}
regex_test('-12345');
regex_test('Test=12354');
regex_test('{57040540-4432-4220-8D2D-4676B57E223D}');
sorry, der Fehler lag bei mir: ich habe lediglich die Suchergebnisse match[1] im Script berücksichtigt.
Unter dem Strich geht es mir darum, möglichst treffsicher IPS-Objekt-ID’s in Scripts zu erkennen
Hab eben auf die Schnelle ein paar Testläufe gemacht, muss mir das aber wohl noch intensiver anschauen (welcher Such-Pattern der treffsichere ist).
bei Deinem Beispiel rutscht z.B. das hier durch:
Ich denke, da muss ich noch ein wenig rumspielen. Aber grundsätzlich ist der Weg richtig (für meinen Zweck) und die Treffsicherheit ist schon dramatisch besser geworden. Nochmal vielen Dank für die Starthilfe