2017-07-13 6 views
1

Ich benutze preg_match_all, aber ich habe ein Problem, ich bin mir nicht sicher kann mit dieser Methode gelöst werden. Die folgende Zeile ist ein Teil von dem, was ich bin Abrufen:preg_match_all für unbekannte Sätze von 3 Ganzzahlen

XXC033-101-143-147-175-142115-

Die Sätze von Zahlen (033-101-143, usw.) sind, was ich will beziehen zu. Jedoch ist die Anzahl von Sätzen (immer mit drei ganzen Zahlen) unbekannt und kann überall von 1 bis 10 reicht, wenn ich es wusste, dass immer nur zwei Sätze sein, würde ich hat folgende:

if (preg_match_all('#([A-Z]{2}C)([0-9]{3})-([0-9]{3})-([0-9]{6})#', $wwalist, $matches)) 

...rest of code... 

Gibt es trotzdem um dies zu tun, wenn ich keine Möglichkeit habe, die Anzahl der möglichen Mengen von 3 ganzen Zahlen zu kennen. Sie werden immer zwischen #([A-Z]{2}C) und -([0-9]{6}) liegen.

Jede Hilfe würde sehr geschätzt werden! Vielen Dank!

+0

Bitte hinterlassen Probeneingabe, die ein wenig von dem längeren Text zeigt UND ein paar verschiedene Teilstrings zu erfassen (damit wir die Variabilität Ihrer Teilstrings sehen können). Bitte geben Sie Ihre gewünschte Ausgabe für Ihre Eingabe an. – mickmackusa

Antwort

3

Verwenden

'#([A-Z]{2}C)([0-9]{3}-){1,10}([0-9]{6})#' 

{1,10} gibt an, dass die vorhergehenden Submuster in Klammern [0-9]{3}- 1-10-mal wiederholt.

Zusätzlich:

Wenn es 0 oder mehrmals für eine unbestimmte maximale Anzahl wiederholen kann, verwenden *.

Wenn es 1 oder mehrere Male für eine unbegrenzte maximale Anzahl wiederholen kann, verwenden Sie +.

+0

Ehrfürchtig. Vielen Dank! Ich muss vielleicht eine andere Frage dafür stellen, aber hier ist: Wenn ich Ihre Antwort benutze und die $ matches [2] ausdrucke, wird nur die letzte Iteration der 3 ganzen Zahlen ausgedruckt. Ich brauche es, um alle Sätze von 3 ganzen Zahlen auszudrucken. Irgendwelche Ideen? Danke noch einmal! – hunter21188

+1

@ hunter21188 Sie müssen die Erfassungsgruppen ein wenig ändern, probieren Sie https://regex101.com/r/Tw6a7I/1/. – chris85

+0

@ chris85 Perfekt. Genau das, was ich brauchte. Vielen Dank! – hunter21188

0

Targeting nur den 3-stellige Strings, individuell/gegebenenfalls die Gruppen wie folgt erfassen:

Muster: (Demo)

/[A-Z]{2}C\K(\d{3}-)(\d{3}-)?(\d{3}-)?(\d{3}-)?(\d{3}-)?(\d{3}-)?(\d{3}-)?(\d{3}-)?(\d{3}-)?(\d{3}-)?/ 
+0

Down-Abstimmung ist nicht von mir. Ich habe deine Methode ausprobiert und es funktioniert auch. Vielen Dank! Wählte die andere Antwort richtig, da sie zuerst beantwortet wurde. Gab dir eine hohe Stimme. – hunter21188

+0

Beide funktionierten, aber andere Antwort war einfacher. Vielen Dank. – hunter21188

+0

Es tut! Was ich in meinem Kommentar erwähnt habe, war nicht Teil der ursprünglichen Frage, sondern etwas Zusätzliches. Das Hinzufügen der '?:' Löste meine separate Frage im Kommentar. – hunter21188