Reguläre Ausdrücke: String ausschließen: Suche eines Tags unter Ausnahme eines be
Leser: 2
10 Einträge, 1 Seite
WiLi
2004-08-03 20:07
User since 2004-08-03
8
Artikel BenutzerIn
Hallo allerseits!
Bin neu im Forum und Grünling bezüglich Perl. Mein Problem betrifft auch eher die Regulären Ausdrücke. Ich verwende sie in Dreamweaver für "suche und ersetze"
Mein Problem:
im >> <td -Tag << will ich die Angabe >> height="xxx" << löschen und durch >> style="padding:4px" << ersetzen. Dies funktioniert auch wunderbar.
Jetzt aber kommt die Nuß: Wenn >> height="130" << dort steht, soll ausnahmsweise keine Änderung stattfinden.
Meine Suchabfrage sieht so aus:
finde
(<td[^>]*)height="[^"]*"([^>]*>)
(finde ein <td >-tag, in welchem ein height="wert" vorkommt)
und ersetze gegen
$1style="padding:4px"$2
(nimm alles davor und dahinter und setze style="padding:4px" dazwischen)
Der Spezialwert height="130" wird hier also noch nicht berücksichtigt.
Ich suche also einen Operator, mit dem ich die Stringsuche durch negativen Ausschluß eingrenzen kann. Gibt es den? Alle meine verSuche waren bislang ohne Erfolg.
Bitte bedenkt, daß ich in Dreamweaver (soweit ich weiß) keine extra Variablen definieren und füllen kann, da Suche und Ersetze in zwei unterschiedlichen Fenstern eingetragen wird.
Bin für Tips sehr dankbar, auch für Querverweise, falls dies nicht das richtige Forum dafür ist.
Danke
WiLi
kabel
2004-08-03 21:02
User since 2003-08-04
704
Artikel BenutzerIn
spontan faellt mir dazu folgendes ein:
1. zuerst die spezielle height-angabe durch "was anderes" ersetzen
2. die height nach css konvertierung durchfuehren
3. "was anderes" wieder zurueck in die height-angabe transformieren.
die spezielle height-angabe maskierst du damit und versteckst sie so vor der re, die sonst auch matchen wuerde.
HTH
-- stefan
WiLi
2004-08-03 21:54
User since 2004-08-03
8
Artikel BenutzerIn
Ja, sowas hatte ich auch schon angedacht.
**schmunzel** willst Du damit sagen, daß es KEINE Funktion gibt, um Strings auszuschließen? Das tät mich doch etwas wundern.
WiLi
kabel
2004-08-04 00:27
User since 2003-08-04
704
Artikel BenutzerIn
nein. ich bin kein re meister, und schon gar keiner in sachen perl.
perl kennt viele extended regular expressions.
waere es nicht besser, gleich eine externe css datei anzulegen?
du wirst es irgendwann eh wieder aendern (muessen).
-- stefan
pq
2004-08-04 11:10
User since 2003-08-04
12208
Artikel Admin1
[quote=WiLi,03.08.2004, 19:54]
**schmunzel** willst Du damit sagen, daß es KEINE Funktion gibt, um Strings auszuschließen? Das tät mich doch etwas wundern.
[/quote]
doch, gibt es: zero-width negative look-ahead. (steht alles in perlre.pod
beschrieben.)
so sähe der ausdruck dann aus: (<td[^>]*)height="(?!130)[^"]*"([^>]*>)
Hier nochmals eine Frage an pq oder wer sich angesprochen fühlt:
Analog zur obigen Lösung versuchte ich, ein <td Tag auszuschließen, sofern sich darin ein >> colspan="2" << befindet. Dies gelang jedoch nur, indem ich exakt alles vor colspan="2" fand, dann nachguckte, ob dort colspan="2" steht und den rest auch exakt angab.
Ich benutzt mal die Analogie: finde heraus, ob im String (abcdefg) ein "d" vorkommt. Wenn ja, dann benutze diesen String nicht. Ich konnte also nur dadurch das "d" herausfinden, daß ich es so suchte:
finde abc(?!d)efg
Ich möchte jedoch das "d" auch dann als Ausschlußkriterium benutzen, wenn es IRGENDWO im String vorkommt. Wie bewerkstellige ich sowas?
Zur Anwendung soll es ja kommen in Dreamweaver, wo man leider keine Variablen vordefinieren kann. Hast Du dafür auch eine Lösung?
Dreamweaver hat ein Suchfenster und ein Ersetzenfenster. Alles was bei dem Ersetzen-Befehl /a/b/ vorn steht, kommt ins obere Fenster und alles was hinten steht, kommt ins untere Fenster. Und, leider, gibt es da meines Wissens keine Möglichkeit, Variablen vorweg zu definieren. Alles, was man bewerkstelligen will, muß man also im Suchfeld bzw. Ersetze-Feld unterbringen. Noch Ideen dazu?