2017-02-07 5 views
0

Ich muss 300 Dateien iterieren und ändern Sie eine Zeichenfolge von in einer Spalte zu 4 Spalten in Excel. Ich weiß, es gibt eine Möglichkeit, dies in Reg-Ex tun, aber ich kann es nicht fassen out ... Ich weiß, dass preg_match zurückgegebene Übereinstimmungen nennen kann .. aber ich habe versucht, regex101.com zu verwenden, um herauszufinden, wie die zurückgegebenen Ergebnisse ich suche ..Get Array von mehreren Teilstrings preg_match_all

Ich habe diese Zeichenfolge ..

Rev 1: blah blah blah blah blah blah 1/1/2017 BLAH 

und ich muss es in ein Array erhalten, der so aussieht ...

$results = array(
    "rev" => "Rev 1", 
    "text" => "blah blah blah blah blah blah", 
    "date" => "1/1/2017" 
    "name" => "BLAH" 
) 

das Problem, mit dem ich konfrontiert bin, weiß ich nicht, wie mehrere Übereinstimmungen in einem Preg_match Anruf erhalten, um den gewünschten Weg zurückzukehren .. Ich habe versucht, einige Möglichkeiten, dies zu tun, und sind leer ausgegangen .

Ich habe einige Regex, die jeder Zeichenfolge einzeln entsprechen .. aber nicht alle auf einmal.

\d+\/\d+\/\d+ \(?[A-z]+\)? paßt die date und die name mit oder ohne die () um es

^([Rr][Ee][Vv] \d+:) paßt die rev

ich eine Art und Weise kenne nicht die text zwischen den rev und die date so erhalte ich tun nicht reg-ex für das ...

+1

Nichts wird narrensicher sein. Was, wenn im Text etwas erscheint, das wie ein Datum aussieht? – AbraCadaver

+0

Ich habe persönlich wenn alle 300+ Blätter und überprüft alles, wenn ich den Text von einem Excel-Kommentar auf eine neue Registerkarte kopiert. also weiß ich, dass es so etwas nicht gab. und wenn es da ist, dann werde ich sie alle nacheinander durchsuchen und doppelt überprüfen, denn wenn ich dieses Skript ausführe, wird es sie in ein neues Verzeichnis speichern und die Originaldateien nicht überschreiben. aber ja, du hast recht, für andere funktioniert das vielleicht nicht. –

Antwort

1

Sie sind wirklich nah (hier Vorbehalt: Ich nehme an, alle Ihre Saiten werden das gleiche Format sein)

^([Rr][Ee][Vv] \d+:)(.*)\d+\/\d+\/\d+(.*)? 

Die (.*) können Sie erfassen, was zwischen den Gruppen ist. Sie sollten alles, was Sie möchten, in Klammern setzen.

Sie können es in Aktion sehen hier https://regex101.com/r/8GKgWl/1

+0

Ahhh, siehe '(. *)' War das fehlende Glied, ich wusste, dass es einen Weg gab, haha, danke! –

+0

endeten mit diesem https://regex101.com/r/8GKgWl/2 als letzten Ausdruck: D –

+0

false zurück aus irgendeinem Grunde .... https://regex101.com/r/8GKgWl/3 Werke gut, aber –