Ich stoße derzeit auf ein Problem mit Regex unter bestimmten Umständen: Ich muss PHP-Quelldateien (insbesondere Klasse) analysieren, um nach Konstanten zu suchen, die in diesen Dateien definiert sind um sie wieder zur Ausgabe zu bringen.Wie man Lookbehind innerhalb einer Regex mit nicht fester Breite emuliert
Diese Konstanten können eine Dokumentation haben (und deshalb habe ich die Idee von Reflection verlassen, da das Abrufen von Konstanten über Reflection nur ihren Namen und ihren Wert zurückgibt), die innerhalb von Kommentarmarken verschickt werden können.
Ich habe es geschafft, die beiden separaten Teile der Regex zu erstellen (1 ist das Kommentar-Tag, das andere ist die const
Deklaration), aber ich kann nicht beide erfolgreich verbinden: Es scheint, dass die erste Konstante innerhalb Die Datei enthält auch alle zuvor deklarierten Elemente, bis sie den allerersten Kommentarblock erreicht.
Meine regex ist wie folgt (ich bin kein regex Gott so fühlen sich frei, jede Kritik zu bringen):
((\t\)*(/\*+(.|\n)*\*/)\R+)?([\t| ]*(?|(public|protected|private)\s*)?const\s+([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*=\s*(.*);)
Es geht die Probe-Test: Regex101
Falls der Anfangscode verschwindet :
/**
*
*/
class Test {
/**
*
*/
public const LOL = "damn";
/**
*
*/
private const TEST = 5;
public const plop = "dong";
}
ich für Tipps gibt und es sah, und ich habe über positive Lookbehind gelernt, aber von dem, was ich verstand, es funktioniert nur mit fester Breite Muster.
Ich habe keine Ideen mehr.
* „(und das ist, warum ich die Idee der Reflexion verlassen, da nur Konstanten über Reflection Abrufen gibt ihren Namen und ihren Wert)“ * - Ab PHP 7.1.0, die Klasse ['ReflectionClassConstant'] (http://php.net/manual/en/class.reflectionclassconstant.php) ist verfügbar, und Sie können den Dokumentkommentar mit [ReflectionClassConstant :: getDocComment()' abrufen ] (http://php.net/manual/en/reflectionclassconstant.getdoccomment.php). ([kleines Beispiel] (https://3v4l.org/riCgp)) – salathe
Hallo @salathe! Vielen Dank für Ihren Kommentar ! Gute Nachricht, aber was ich vergessen habe zu sagen war, dass die Dev-Umgebung dort auf 5.4 (ja, das ist scheiße) – Cr3aHal0
Oh und @salathe Ich habe dies vergessen, aber abrufen Wert der Konstante über Reflection * kann konstante Deklaration und Struktur ändern (doppelt zitiert string mit geflüchtetem double quote zum Beispiel) deshalb habe ich es auf den ersten Blick nicht benutzt – Cr3aHal0