Hallo acid_ice,
Kannst du mir das jetzt auch erkären, damit ich nicht nochmal
fragen muss? ;)
Selbstverstaendlich.
m~href=(?:(["'])(?!http://)(.+?)\1))|(?:(?!http://)(\S+))~g
bedeutet ungefaehr:
»href=« gefolgt von
entweder
entweder " oder ' (speichere dies in einer Backreference),
gefolgt von nicht http:// (allerdings ist dieses Pattern
ein Zero-Width-Pattern, heisst, der Status bleibt erhalten und
der Match faehrt nach erfolgreichen »nicht http://« an derselben
Stelle fort, wo er aufgehoert hat) gefolgt von irgendwas bis zum
naechsten Zeichen, dass in der Backreference 1 steckt (\1)
(speichere das irgendwas in einer Backreference)
oder
nicht http:// (wieder als Zero-Width-Pattern) gefolgt von alles
ausser einem Whitespace.
Die (?:)-Klammern dienen nur der Gruppierung, das ?: verhindert, dass
diese Klammerung als Backreference gesehen wird.
Und wie siehts aus, wenn ich tatsächlich einmal mit Hilfe von
$wert =~ s~asdf~asdfadsf~gi; etwas ersetzen will und im
Suchbereich des Musters einen definitiven Ausschluss mit Hilfe
von ^ vornehmen will?
Eine negierte Klammer (also [^irgendwas]) ist eine negierte
_Zeichenklasse_, das bedeutet, [^http://] heisst soviel wie »Nicht h
oder nicht t oder nicht t oder nicht p oder nicht : oder nicht /
oder nicht /«.
Also wie wäre da die Notation, wenn ich z.B. http:// aus den
Ergebnissen herausfiltern will? [^http] geht ja nicht...
Das haengt davon ab, wie der Ausdruck aussieht. Eine Moeglichkeit
ist das von mir benannte »zero-width negative look-ahead pattern«.
Wie gesagt, das haengt davon ab, wie der Ausdruck insgesamt aussehen
soll.
Du musst dir klarmachen, dass ein regulaerer Ausdruck einen String
_beschreibt_. Wenn du also erst darueber nachdenkst, wie der String
aussehen darf (zuerst ruhig auch mit Worten und schriftlich, spaeter
mit genuegend Uebung wirst du das nicht mehr brauchen) und danach
dann das Pattern formulierst, wirst du kaum Probleme haben, den
richtigen Regex zu finden -- sofern das Problem ueberhaupt durch ein
Regex geloest werden kann.
Grüße,
CK
<zentrum> wie war noch mal die option in make.conf fuer das benutzen von pipes um das compile zu beschluenigen?
<CK1> CFLAGS="-pipe"
<torsten> Oder man frage einen Gentooer seiner Wahl, wie man 2 km Compilerswitches fuer seine CPU hinbekommt ;)
http://wwwtech.de/