Ich brauche eine Regex, die eine bestimmte Erfassungsgruppe entspricht, die in einem mehrzeiligen Kommentar/* ... */fällt.Suchen Sie ein Wort im mehrzeiligen Kommentar mit einer Regex
Insbesondere muss ich PHP-Variablen-Definitionen innerhalb mehrzeilige Kommentare
zum Beispiel finden:
/* other code $var = value1 */
$var = value2 ;
/*
other code
$var = value3 ;
other code
*/
müssen nur die beiden Vorkommen von ‚$ var =‘ passen in den Kommentaren, aber nicht den einen außerhalb der Kommentar.
für das obige Beispiel schrieb ich einen regulären Ausdruck, die uneingeschränkte Lookbehind verwendet, wie dies
(?<=[/][\*][^/]+)(\$var) | (?<=[/][\*][^\*]+)(\$var)
aber diese regex versagt, falls es sowohl charachter findet * und/auch wenn sie voneinander entfernt ist voneinander zwischen der Kommentar öffnende Tag '/ *' und $ var, die nicht die gewünschte bahaviour ist:
es zum Beispiel in dem Fall versagt:
$var = .... ;
/*
other * code/
$var = .... ;
other code
*/
bacause es sowohl '*' findet eine nd '/', auch wenn es nicht das schließende Tag des Kommentars ist.
Der Schlüsselpunkt ist, dass ich ein Token, das eine Kombination aus zwei Zeichen ist, nicht negieren kann, sondern nur eins nach dem anderen negieren kann: [^ *] oder [^ /].
... außerdem kann ich nicht das Token [\ s \ S] anstelle von [^ /] und [^ *] verwenden, weil es $ var aus Kommentaren mit vorangestelltem Kommentarblock auswählen würde.
Irgendwelche Ideen? Ist es sogar möglich mit normalen Regex dies zu erreichen? Oder würde ich etwas anderes brauchen?
Wie wäre es mit ['\ G' wie in dieser Demo bei regex101] (https://regex101.com/r/eO9fU4/1). –
Vielen Dank! Dieser Regex beantwortet die Frage. Mit dem Meta-Zeichen \ G funktioniert gut! Das einzige Problem ist, dass es für Anfänger etwas schwer zu verstehen ist ... Ich verstehe, warum die Verwendung in diesem Fall, aber ich bin immer noch nicht genau mit der allgemeinen Bedeutung von (?! ^) – Obomar
Großartig es hilft. Ich habe eine Antwort mit einer Erklärung gegeben. –