2017-10-16 3 views
0

Lassen Sie uns sagen, dass ich eine Zeichenfolge wie dieses:Entfernen CSS innerhalb Kommentare PHP

$css = '.class { 
    color: red; 
} 

/* Start Comment */ 
.replace { 
    content: "me"; 
} 
/* End Comment */'; 

Wie kann ich alles in den Kommentar entfernen, einschließlich der Kommentar selbst?

Ich möchte dieses Ergebnis:

.class { 
    color: red; 
} 

ich so etwas wie dies versucht haben, aber es tut es nicht:

$css = preg_replace('#(/* Start Comment */).*?(/* End Comment */)#', '', $css); 

Ich habe auch schon versucht, diese: https://stackoverflow.com/a/13824617/2391422

Fehle ich etwas lächerlich hier offensichtlich?

Wirklich zu schätzen jedes Feedback - Regex ist etwas, was ich weiter studieren muss.

+0

'*' ist ein Sonderzeichen, Sie müssen es entziffern, wenn Sie ein Literal '*' abgleichen wollen. '.' stimmt nicht standardmäßig mit dem Zeilenvorschubzeichen' \ n' überein. Damit es auch mit dem Newline-Zeichen übereinstimmt, müssen Sie den Modifikator 's' verwenden. –

+0

Versuchen Sie, '/' und '*' zu umgehen –

Antwort

1

Sie können diesen Code erhalten, indem zu arbeiten Hinzufügen der DOTALL-Modifikator s http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

$css = preg_replace('#(/\\* Start Comment \\*/).*?(/\\* End Comment \\*/)#s', '', $css); 

Zusätzlich kann die * sollte die gewünschte Wirkung erhalten entwertet werden. Die / sind in Ordnung, wie Sie ein anderes Trennzeichen verwenden.

+0

/\\\\.+//s entspricht auch Ihrer Zeichenkette – miknik

+0

Sie müssen nicht zwei Backslashes verwenden, um dem '*' nur einem einzigen zu entkommen. Beachten Sie, dass Sie die Funktion "\ Q ... \ E" auch für lange Literalteile verwenden können. –

+0

Es funktioniert ohne, aber es ist sauberer immer den Backslash zu entkommen, auch in Anführungszeichen. Neben einzelnen Anführungszeichen selbst ist das einzige, was manuell zu entkommen. – clemens321