Zum Inhalt springen
ThreadPHP & MySQL

Negatives Lookbehind

Kategorie
PHP & MySQL
Gelesen
1206
Antworten
5
Erstellt von: gelöschter BenutzerDatum: 30.06.2011, 13:17 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

Redaktionelle Einordnung

Diese archivierte Diskussion behandelt Negatives Lookbehind aus Sicht der Rubrik PHP & MySQL.

CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.

Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.

Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.

Startbeitrag

Originaler Foreninhalt in modernisierter Darstellung.

Zur Kategorie
gelöschter Benutzer
Threadstart · PHP & MySQL 1206 mal gelesen · 30.06.2011, 13:17 Uhr

Folgendes markiert alle Funktionsaufrufe fett (z.B.: "System.out.println" = out, println, etc.).


$reg = '/(\.)(\w+)/';
$rep = '\$1\$2';
$code = preg_replace($reg, $rep, $code);


Das klappt soweit. Nun möchte ich den regulären Ausdruck in der Form einschränken, dass dies nicht geschehen soll, wenn am Anfang der Zeile "import " steht. Sollte eigentlich mit einem Negativen Lookbehind gehen, aber ich weiß nicht wie man dieses verwendet bzw. habe ein Beispiel gefunden, dass aber auf diesen Anwendungsfall nicht übertragbar ist. Folgendes z.B. klappt nicht:


$reg = '/(?<!import)(.*\.)(\w+)/';
$rep = '\$1\$3';
$code = preg_replace($reg, $rep, $code);


Wenn ich die zweite Version nehme werden keine Methoden mehr markiert. Weiß jmd. wie ich das implementieren kann?


Antworten

5 Beiträge
gelöschter Benutzer
am 30.06.2011, 22:03 Uhr schrieb
Antwort

Hab jetzt nur kurz drüber geschaut, aber versuch doch einmal $1$2 anstelle von $1$3. Du hast ja schließlich auch nur zwei Subpattern, der lookbehind zählt nicht mit.

gelöschter Benutzer
am 01.07.2011, 04:05 Uhr schrieb
Antwort

Sorry. Hab mich verschrieben bzw. vorher schnell noch etwas geändert ($2 gelöscht) und vergessen $2 anstatt $3 zu schreiben. Daran liegt es nicht.

gelöschter Benutzer
am 01.07.2011, 07:53 Uhr schrieb
Antwort

Eine Methode/Operation in Java definiert sich doch ganz anders als eine Import Regel.

Zb:
import java.io.*;
System.out.println("FooBar");


Die runden Klammern und der optionale Punkt am Anfang sind entscheidend.

gelöschter Benutzer
am 01.07.2011, 10:52 Uhr schrieb
Antwort

Vielleicht wird es an einem Beispiel deutlicher:

unics.bplaced.net/Sprachen/03_Java/05_Datenstrukturen.html



In ListsExamples.java gibt es ein "import java.util.*;" und "util" wird dort farblich markiert, obwohl dies nicht geschehen soll (oben habe ich der Einfachheit halber die Methoden fett markiert).
gelöschter Benutzer
am 01.07.2011, 12:02 Uhr schrieb
Antwort

Es wird nicht nur das util markiert sonder auch das System.out.println(); und das ist auch keine Methode. Eigentlich werden alle Objekt Attribute als Methode markiert.

zB:
this.foo;
this.foo.bar;