Syntax für reguläre Ausdrücke in PHP alle Instanzen eines Formats zu extrahieren
Frage
Ich versuche, alle Instanzen eines bestimmten Format aus einer Zeichenfolge zu extrahieren:
Ich frage mich, ob meine neue Sony [PT # 123456ABC; Sony] hat diese Funktion aber mein Freund sagt die neuen Toshiba [PT # AD-3232hjk; Toshiba] hat diese Funktion.
Ich möchte extrahieren:
[PT # 123456ABC; Sony]
[PT # AD-3232hjk; Toshiba]
Wie man hier sehen kann, sind die einzigen Elemente in den konsistenten Positionen sind:
- [PT #
- ;
- ]
Ich habe versucht, verschiedene Arten von strpos () zu verwenden, aber wegen der unterschiedlichen Längen und Formate der Teilenummern und Herstellernamen konnte ich nicht zuverlässig diese Instanzen aus einem viel größeren String herausziehen. Ich habe verschiedene Wege versucht, reguläre Ausdrücke zu verwenden, dies jedoch mit ihnen mein Wissen zu lösen ziemlich begrenzt ist. Nachdem ich diese Ausdrücke in Variablen extrahiert und platziert werde ich dann die Teilenummern und Herstellernamen aus dem Ausdruck trennen müssen. Dies kann auch einfacher sein, mit regulären Ausdrücken zu erreichen.
Jede Hilfe ist willkommen. Dank
Lösung
Ich denke, das würde es tun
preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );
print_r( $matches );
Altternatively, wenn man nur will die einzigartigen Informationen erfassen
preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );
Andere Tipps
$matches = array();
preg_match_all( "/\[PT#([^\];]+);([^\]]+)\]/", $input, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
echo "id=", trim($match[1]), " brand=", trim($match[2]), "\n";
}
Ich nehme an, Sie werden aus einer Textdatei liest viele dieser Einträge enthält. Was Sie tun können, ist:
preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);
wird es alle Spiele in das Array $ result setzen und Sie können sie zugreifen, als so:
echo $result[1][0]; //echos first occurrence's serial
$ result wird Spalte Haupt sortiert und der erste Eintrag in ein Spiel ist das komplette Match String
echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony
Ich hoffe, das hilft
EDIT: fixed die Regex, sollte jetzt funktionieren (noch nicht getestet)