2010-12-27 33 views
0

Ich mag eine Vorlage-Datei analysieren und einen bestimmten Satz von Variablen zu finden, die so aussehen:regex Problem mit PHP

<!-- [LOOP-VARIABLENAME] --> 

Ich möchte nur den Variablennamen und die Startposition des Spiels zu bekommen. Zuerst habe ich strpos() benutzt, aber diese Funktion kann kein Regex-Argument verwenden.

Array (
    [0] => 1678 // strpos 
    [1] => <!-- [LOOP-VARIABLENAME] --> // full match 
    [name] => VARIABLENAME 
) 

ist das möglich? Ich habe versucht, diese Regex zu verwenden:

preg_match_all('/<!-- [LOOP-(?P<year>\W+)/', $html, $matches, PREG_OFFSET_CAPTURE); 

aber kein positives Ergebnis.

danke für Ihre Hilfe.

Antwort

0
<?php 

$html = "jg<!-- [LOOP-VARIABLENAME] -->sdfsdfsdf<!-- [LOOP-TESTNAME] -->sfdsdffsd"; 

preg_match_all('/<!-- \[LOOP-(\w+)]\ -->/', $html, $matches, PREG_OFFSET_CAPTURE); 

echo '<pre>' . print_r($matches, true) . '</pre>'; 

?> 

Dieser Code gibt eine Ausgabe wie folgt aus:

Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [0] => 
        [1] => 2 //position where matching <!-- starts, 1st var 
       ) 

      [1] => Array 
       (
        [0] => 
        [1] => 39 //position where matching <!-- starts, 2nd var 
       ) 

     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [0] => VARIABLENAME 
        [1] => 13 //position where VARIABLENAME starts 
       ) 

      [1] => Array 
       (
        [0] => TESTNAME 
        [1] => 50 //position where TESTNAME starts 
       ) 

     ) 

) 

Wenn das Array nicht recht sehen, wie Sie es wollen, kann ich etwas mehr Code schreiben, um es zu transformieren.

+0

Dank das funktioniert gut. –

+0

gibt es eine Möglichkeit, auch das komplette Spiel zu bekommen? Ich brauche die Länge der Übereinstimmung = Anzahl 28 –

+0

Dann sollten Sie akzeptieren, indem Sie auf das Häkchen oben links in dieser Antwort klicken. Edit: Ich werde mir ansehen, was du gerade gefragt hast. – thirtydot

0

Sieht aus wie Sie nicht Ihre Sonderzeichen .. zum Beispiel zu entkommen,

[LOOP 

\[LOOP 

in Ihrem RegexMuster sein sollte.

0

Dank für Ihre Antwort, aber versucht, diese bereits

preg_match_all('/<!-- \[LOOP-(?P<name>\W+)/', "<!-- [LOOP-VARIABLENAME] -->", $matches, PREG_OFFSET_CAPTURE); 

print_r ($ matches);

die Ausgabe wie folgt aussieht:

Array ([0] => Array () [name] => Array () [1] => Array ()) Array ([0] => Array () [name] => Array () [1] => Array ())