2017-07-29 5 views
-1

Wie preg_match_all() mit dieser Probe verwendenWie die 3 Werte extrahieren mit preg_match_all

<div class="b1 b2 A1 C7" style="right: 9px; top:5px;"> 
    <div class="tr">1</div> 
</div> 

<div class="b1 b2 A4 C2" style="right: 19px; top:5px;"> 
    <div class="tr">2</div> 
</div> 

<div class="b1 b2 A1 C4" style="right: 29px; top:5px;"> 
    <div class="tr">2</div> 
</div> 

ich diese Werte

  1. A nur die Zahl nach A
  2. erhalten möchten
  3. C nur die Nummer nach C
  4. <div class="tr"></div> nur die Zahl zwischen DIV

Dies ist, was ich

preg_match_all('/A(.+?) C(.+?)| class="tr">(\d+)<\/div><\/div>/s', $str, $m); 

versucht haben, aber jetzt arbeite ich will nicht preg_replace() neue Zeile oder Leerzeichen verwenden .

Antwort

1

Diese Arbeit für Ihren speziellen Fall:

preg_match_all('/A(\d+?)|C(\d+?)|\<div class="tr"\>(\d+?)\<\/div\>/s', $str, $m); 

Das zurück:

[0] => Array 
    (
     [0] => A1 
     [1] => C7 
     [2] => <div class="tr">1</div> 
     [3] => A4 
     [4] => C2 
     [5] => <div class="tr">2</div> 
     [6] => A1 
     [7] => C4 
     [8] => <div class="tr">2</div> 
    ) 

[1] => Array 
    (
     [0] => 1 
     [1] => 
     [2] => 
     [3] => 4 
     [4] => 
     [5] => 
     [6] => 1 
     [7] => 
     [8] => 
    ) 

[2] => Array 
    (
     [0] => 
     [1] => 7 
     [2] => 
     [3] => 
     [4] => 2 
     [5] => 
     [6] => 
     [7] => 4 
     [8] => 
    ) 

[3] => Array 
    (
     [0] => 
     [1] => 
     [2] => 1 
     [3] => 
     [4] => 
     [5] => 2 
     [6] => 
     [7] => 
     [8] => 2 
    ) 
+0

Seien Sie willkommen. Wenn die Antwort für Sie nützlich ist ... kann die Antwort akzeptieren ... sehen Sie unter den Abstimmpfeilen nach – MTK

1

Das Muster, das Sie wollen, ist:

/A(\d+) C(\d+)[^<]+<div class="tr">(\d+)/ 

Demo

Dieses Muster ist mu ch schneller, weil es keine Pipes verwendet (|) und eine negierte Zeichenklasse verwendet, um schnell zur finalen Capture-Gruppe zu gelangen.

Es ist auch wichtig zu beachten, dass mein Muster keine unnötigen Zeichen entkommen lässt. Die \d Zeichen sind genauso sicher im "gierigen" Modus, so dass die ? s entfernt werden kann.

Da es keine . s im Muster gibt, hat das s Flag keinen Zweck am Ende des Regex-Musters - also habe ich es entfernt.

Mein Muster wird in nur 90 Schritten abgeschlossen, im Vergleich zu MTK 741 Schritten.

Verwandte Themen