Marcel: Regex-Problem

Hallo

Als Regex-Anfänger möchte ich eine Regex schreiben, welche mir alle Kommentare in einem Quelltext markiert, d.h

/*
   Kommentar
*/

Was ich habe ist folgendes:

/\[0-9a-zA-Z \n]*\/

Das klappt auch. Problem ist aber, dass sobald Sonderzeichen im Kommentar sind, dieser nicht mehr erkannt wird. Möchte ich alle Zeichen erkennen, d.h. mache ich folgendes:

/\.*\/

dann wird aber

/* Kommentar 1 */ /* Kommentar 2 */

als ein einziger Kommentar erkannt.

Wie löst man dieses Problem?

Gruss

  1. Hi,

    Wie löst man dieses Problem?

    durch Abschalten der Greediness.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo

      Wie löst man dieses Problem?

      durch Abschalten der Greediness.

      Das bedeutet?

      Gruss Marcel

      1. Hi,

        durch Abschalten der Greediness.
        Das bedeutet?

        dass Du im Zusammenhang mit Regular Expressions nach dem von mir genannten Stichwort suchen sollst.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo,

    hört sich so an, als sei Dein regulärer Ausdruck zu "gierig".
    Das heißt, vereinfacht gesagt, er schnappt sich das erste "/*" und das letzte "*/" in Deinem Dokument und liefert alles dazwischen als Ergebnis zurück, was ja korrekt ist.
    Wenn Du willst, daß er nach einem gefundenen "/*" sofort das nächste "*/" matcht, dann mußt Du Deinem regulären Ausdruck sagen, daß er nicht gierig sein soll (ungreedy). Dafür gibt es den Modifier "U" (siehe http://php.speedbone.de/manual/en/reference.pcre.pattern.modifiers.php.

    Selbst wenn das dann so funktioniert, wie Du es Dir vorstellst, solltest Du trotzdem noch einmal überlegen, ob Du Deinen regulären Ausdruck genauer formulieren kannst, da der Punkt "." den regulären Ausdruck langsamer macht (er muß sich eben wirklich für alle möglichen Zeichen interessieren).

    Zum Beispiel kannst Du auch für internationale Sonderzeichen Gruppen bilden: [a-zA-ZÀ-ÖØ-öø-ž]
    (wurde vor geraumer Zeit einmal hier im Forum diskutiert).

    Ciao,
    Andreas