Syntax für reguläre Ausdrücke in PHP alle Instanzen eines Formats zu extrahieren

StackOverflow https://stackoverflow.com/questions/837550

  •  10-07-2019
  •  | 
  •  

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

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top