RexExpr: "bis zum ersten Vorkommen"
malte
- programmiertechnik
0 romy0 Felix Riesterer
Hallo,
lese aus einer Apache-conf Daten aus.
Hier ein Ausschnitt
<IfModule>
#Daten
</IfModule>
<VirtualHost>
#Daten
</VirtualHost>
<IfModule>
#Daten
</IfModule>
Da ich nur an "VirtualHost" interessiert bin, schneide ich den Rest weg:
s/<ifmodule.+>(.|\n|\s)+</ifmodule>//gi;
(bin ein bisschen Newbie auf dem Gebiet RegExp, also nicht wundern, falls etwas "total umständlich" ist ;-).
Bei mir wird jetzt immer alles gelöscht, was ja auch verständlich ist. Den Teil zwischen <ifmodule.+> und </ifmodule> kann ich aber unter keinen Umständen weiter spezifizieren.
Kann man also der RegExpr irgendwie sagen, dass der unmittelbar folgende Ausdruck(steil) (in meinem Fall "</ifmodule>") gelten soll und nicht der letzte o.ä. ?
Habe schon überlegt, ob es mit "global" zusammenhängt... aber weder mit noch ohne (noch mit "once") funktioniert es :-(
Komme einefach nicht weiter...
Hi malte,
<IfModule>
#Daten
</IfModule><VirtualHost>
#Daten
</VirtualHost><IfModule>
#Daten
</IfModule>
s/<ifmodule.+>(.|\n|\s)+</ifmodule>//gi;
Vielleicht wäre es sinnvoll nach dem gleichen System einfach die Daten unter Virtual Host auszuschneiden und nicht die überflüssigen wegzunehmen. Ich kann dir keine RegEx-spezifische Hilfestellung geben, aber wenn der Block, der behalten werden soll nur einmal vorkommt, denke ich das es einfacher ist, nur eben diesen zu extrahieren.
ciao
romy
Lieber malte,
Da ich nur an "VirtualHost" interessiert bin, schneide ich den Rest weg:
s/<ifmodule.+>(.|\n|\s)+</ifmodule>//gi;
was soll denn ^^^^^^^ ?
Du möchtest doch alles, was zwischen <ifmodule> und </ifmodule> steht...
Probier's doch mal mit folgendem Code (ungetestet):
s/<ifmodule[^>]*>((?:.(!</ifmodule))*)</ifmodule>//gi
Meine Klammern bedeuten:
1. merke Dir das
2. merke Dir das nicht (?:), gruppiere den Inhalt beliebig oft
3. das Folgende darf jetzt nicht stehen (!...)
Hoffentlich tut's... ;-)
Liebe Grüße aus Ellwangen,
Felix Riesterer.