Schrift
[thread]2915[/thread]

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
#29310 #29310
User since
2004-08-03
8 Artikel
BenutzerIn
[default_avatar]
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
#29311 #29311
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
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
#29312 #29312
User since
2004-08-03
8 Artikel
BenutzerIn
[default_avatar]
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
#29313 #29313
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
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
#29314 #29314
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[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)[^"]*"([^>]*>)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
esskar
 2004-08-04 12:54
#29315 #29315
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
@pq: cool
Gast Gast
 2004-08-04 16:02
#29316 #29316
Vielen Dank!

Es klappt fürzüglich.

WiLi
WiLi
 2004-08-05 15:04
#29317 #29317
User since
2004-08-03
8 Artikel
BenutzerIn
[default_avatar]
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?

Danke schonmal vorweg!

Herzlich grüßt
WiLi
renee
 2004-08-05 15:12
#29318 #29318
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
my $string = 'test';
my $var = 'da';
for($string,$var){
print "d kommt nicht in $_ vor\n" if($_ !~ /d/); # wichitg: !~
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
WiLi
 2004-08-05 19:08
#29319 #29319
User since
2004-08-03
8 Artikel
BenutzerIn
[default_avatar]
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?

Danke soweit!

Jerzlich grüßt
WiLi
<< >> 10 Einträge, 1 Seite



View all threads created 2004-08-03 20:07.