User since
2004-08-03
8
Artikel
BenutzerIn
Nochmals Hallo allerseits,
mit Dreamweaver möchte ich Tags mit bestimmten Attributen finden, jedoch tasuchen sie in unterschiedlichem Reihenfolgenmuster auf:
<td width="10" height="20"> und
<td height="20" width="10">
möchte ich gerne mit EINER Suchabfrage finden. Ich benutze Reguläre Ausdrücke im Suchdialog.
Soweit mir bekannt ist, kann ich bisher mit RegAus nur Dinge finden, wenn sie in der richtigen Reihenfolge gesucht werden:
finde "width" gefolgt von "height". (umgekehrt findet ers nicht)
Oder Irre ich (hoffentlich)?
Ich möchte eben ein tag finden, worin "width", "height", "padding", etc vorkommen, aber in b liebiger Reihenfolge. Wie geht das?
Bitte bedenkt, daß DW keine Vordefinition von Variablen erlaubt.
Danke für Eure Mühe!
WiLi
User since
2004-02-19
1750
Artikel
BenutzerIn
hm, ich weiss nicht ob dreamweaver so was unterstützt, aber im standart perl regex gibt&´s ein oder.
/width|height|padding/
perldoc perlre
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
User since
2004-08-03
8
Artikel
BenutzerIn
ja, das ODER | Zeichen gibts und es funktioniert,
allerdings müßte ich dann bei Suche nach n Ausdrücken eine n-fache Abfrage mit jeweils n Suchbegriffen, getrennt von |, durchführen. Das ist selbstverständlich nicht sehr elegant.
Suche
(width|height|padding)\s*(width|height|padding)\s*(width|height|padding)
würde dann wohl alle Kombinationen von width, height, padding
finden.
Hat noch jemand bessere Ideen dazu?
WiLi
User since
2003-08-04
5246
Artikel
ModeratorIn
wenn du einen tag in einem string hast, koenntest du ihn in etwa folgendermaszen parsen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (my $tag, %attributes) =
$string =~ m~
<
([a-zA-Z]+) # tag, z.B. td => $1
(?: # gruppierende klammer (speichert nicht), enthaelt immer ein name/wert-paar
\s*
([a-zA-Z]+) # name => $2, $4, $6, ...
\s*=\s*
\"(.+?)\" # wert => $3, $5, %7, ...
\s*
)* # ende der gruppierenden klammer; 0-Mal oder oefter
\s*
/? # optional: einfacher tag wie bei <img />
>
~x) {
# und irgendwas damit machen, z.B. ausgeben
print "TAG: $tag\n";
foreach (keys %attributes) {
print " $_ => $attributes{$_}\n";
}
} # if
die schwachstelle von diesem Code ist, dass html aussehen kann wie /)%/(&$( und es vom browser immer noch dargestellt wird... aber bei einigermaszen korrektem Html muesste er eigentlich funktionieren (habe ihn aber nicht getestet)