2012-04-11 15 views
1

ich den folgenden Text haben:Ein einfacher regulärer Ausdruck, der mich stört

<!--:en-->&nbsp; 

<!--:--> 

Ich möchte ein Muster konstruieren, es aus einem String (PHP) zu extrahieren. Ich versuche mit:

<!--:[a-z]{2}-->(&nbsp;\r\n\s)<!--:--> 

Aber es funktioniert nicht, weiß jemand, warum oder könnte mir helfen?

Antwort

1

Sie müssen Sonderzeichen wie Bindestrich zu entkommen. Versuchen Sie folgendes:

/<\!\-{2}\:[a-z]{2}\-\->((&nbsp;|\s)*)<\!\-{2}\:\-{2}>/ 
+2

Seien Sie vorsichtig, hier erfassen Sie Zeichenfolgen wie "ssspppspps" –

+0

Vielen Dank. Ich habe jetzt meine Antwort geändert, um   – Leonard

+1

erzwingen Jetzt erfassen Sie die  , aber nur eine kann erkannt werden. –

1

Wenn ich deine Frage richtig verstanden, müssen Sie den Text gesamten übereinstimmen, Kommentare enthalten.

Also, streng über Ihr spezielles Problem, würde ich so etwas verwenden:

$s = "<!--:en-->&nbsp; 

<!--:-->"; 

$a = array(); 
preg_match('/<!--:[a-z]{2}-->&nbsp;\\s+<!--:-->/', $s, $a); 

for ($i = 0; $i < count($a); $i++) { 
    var_dump(htmlentities($a[$i])); 
} 

ich nicht in Frage Allgemeinen, wenn Sie HTML mit regulären Ausdrücken oder nicht, aber bemerken, obwohl analysieren sollte, dass Colin ist richtig, wenn er sagt, dass realistische HTML-Analyse mit regulären Ausdrücken kann hervorragend hart (lesen Sie "fast unmöglich"), wie die Beiträge, die er angegeben Zustand.