Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]424[/thread]

Regular Expression tunen

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
ramseier
 2005-02-08 10:59
#4282 #4282
User since
2005-02-08
6 Artikel
BenutzerIn
[default_avatar]
Ich habe ein Script geschrieben welches mittels wget von einem anderen Server daten holt, Quelltext ersetzt, und dann die neue Seite ausgibt.

Das funktioniert soweit ganz gut, aber die riesige Regular Expression zwingt den Server in die Knie.

Gibt es eine Möglichkeit diese RegExp performancemäßig zu optimieren?

<!- Expression Anfang ->
$body =~s/(<[Tt]+[Rr]+[a-zA-Z0-9:;&§,#%\- \?\.\"\'\=\_]*>)[\d\s]*(<[Tt]+[Dd]+[a-zA-Z0-9:;&§,#%\- \?\.\"\'\=\_]*">)(<[a-zA-Z0-9 <>=\"\':\-\.\_?%]*)(\/*)([a-zA-Z0-9\-]*)(\/*)([a-zA-Z0-9 <>=\"\':\-\.\_?%]*)(\/*)([a-zA-Z0-9 <>=\"\':\-\.\_%]*)([a-zA-Z0-9 <>=\"\':\-\.\_?%]*)([a-zA-Z0-9&=%\+\_\.\"]*>)(<[Ii]+[Mm]+[Gg]+ [Ss]+[Rr]+[Cc]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*"">)(<[Ii]+[Mm]+[Gg]+ [Ss]+[Rr]+[Cc]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*">)(<[\/Aa]*>)(<\/[Tt]+[Dd]+>)[\d\s]*(<[Tt]+[Dd]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*>)[\d\s]*([&;a-zA-Z0-9]*)[\d\s]*([a-z<>A-Z0-9 :=? \"\/\-\.\_]*[&a-zA-Z=]*)([0-9]*)([0-9a-zA-Z%&=\+\"\_]*>)([a-zA-Z0-9\s\.\-\_]*)(<\/[Aa]+>)[\d\s]*(<IMG SRC="\/basis-lsupport\/webnode\/modified.gif" BORDER="0" ALT="Modified">[\d\s]*)?(<\/[Tt]+[Dd]+>)[\d\s]*(<[Tt]+[Dd]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*>)[\d\s]*(<[a-zA-Z0-9\_\-\.\"\':= ]*[a-zA-Z0-9;,()\'\" ]*>)(<[Ii]+[Mm]+[Gg]+ [Ss]+[Rr]+[Cc]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*">)(<\/[Aa]+>)[\d\s]*(<\/[Tt]+[Dd]+>)[\d\s]*(<[Tt]+[Dd]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*">)([a-zA-Z0-9 ]*)([a-zA-Z0-9<> \_\-\.&;:,\/]*)[\d\s]*([a-zA-Z<> \_\-\.&;:,\/=\"\']*)([0-9:\- ]*)([a-zA-Z<> \_\-\.&;:,\/=\"\']*)[\d\s]*([a-zA-Z<> \_\-\.&;:,\/=\"\']*)/$1\n$2$3$4$5$6$7$8$9$10$11$12$13$14$15\n$16\n$17$18$19$20$21$22\n\n$23$24\n$25\n<A HREF="" ONCLICK="javascript:sendLink($19,'$9');return false"><img src="http:%5C/\/web4bizl.med.siemens.de\/llimages\/pfeil.gif" border=0 alt="Link zum CMS &uuml;bertragen"><\/a><A HREF="" ONCLICK="javascript:showLink('$19&docTitle=$9','$21');return false"><img src="http:%5C/\/web4bizl.med.siemens.de\/llimages\/punkt.gif" border=0 alt="Link anzeigen">\n$28\n$29$30$31$32\n$33$34$35\n$36$37$38/g;
<!- Expression Ende ->\n\n

<!--EDIT|ramseier|1107853222-->
esskar
 2005-02-08 11:05
#4283 #4283
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
was macht das ding?
lichtkind
 2005-02-08 11:11
#4284 #4284
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ja man kann regex vorkompilieren siehe die schriften von jason dominus aber in deinem fall erstmal in sinnvolle einheiten splitten.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
ramseier
 2005-02-08 11:20
#4285 #4285
User since
2005-02-08
6 Artikel
BenutzerIn
[default_avatar]
Der zu ersetzende Text besteht aus einer Liste mit HTML-Blöcken.
In diesen Blöcken werden am Stück einzelne Links und Bilder ausgetauscht und JavaScriptaufrufe eingebaut.
Diese HTML-Blöcke müssen am Stück verändert werden da die einzelnen Links voneinander abhängig sind.
esskar
 2005-02-08 11:25
#4286 #4286
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
kannst du mal ein vorher nachher posten, damit man ein gefühl bekommt?
ramseier
 2005-02-08 11:38
#4287 #4287
User since
2005-02-08
6 Artikel
BenutzerIn
[default_avatar]
Vorher:
<TR STYLE="background:#D3E2F1;">
<TD NOWRAP WIDTH="1%"><A HREF="/basis-l/livelink.exe/CTS.ppt?func=doc.Fetch&nodeId=388865&docTitle=CTS%2Eppt"><IMG SRC="/basis-lsupport/8space.gif" WIDTH="8" HEIGHT="8" BORDER="0" ALT=""><IMG SRC="/basis-lsupport/wlrd/appppoin.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Document"></A></TD>
<TD SCOPE="rowgroup" NOWRAP>
&nbsp;<A HREF="/basis-l/livelink.exe/CTS.ppt?func=doc.Fetch&nodeId=388865&docTitle=CTS%2Eppt">CTS.ppt</A>

</TD>
<TD NOWRAP ALIGN="CENTER" WIDTH="1%">
<A HREF="" ONCLICK="javascript:showFunctionMenu('', 388865, event);return false"><IMG SRC="/basis-lsupport/webdoc/actions.gif" NAME="x388865" BORDER="0" ALT="Functions"></A>
</TD>
<TD NOWRAP ALIGN="right">125 KB&nbsp;</TD>
<TD NOWRAP ALIGN="center">2004-12-31 13:43</TD>
</TR>

Nachher:
<TR STYLE="background:#D3E2F1;">
<TD NOWRAP WIDTH="1%"><A HREF="https://livelink-dms.med.firmenserver.com/basis-l....<IMG SRC="https://livelink-dms.med.firmenserver.com/basis-l....f" WIDTH="8" HEIGHT="8" BORDER="0" ALT=""><IMG SRC="https://livelink-dms.med.firmenserver.com/basis-l....f" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Document"></A></TD>
<TD SCOPE="rowgroup" NOWRAP>
&nbsp;<A HREF="https://livelink-dms.med.firmenserver.com/basis-l....t;

</TD>
<TD NOWRAP ALIGN="CENTER" WIDTH="1%">
<A HREF="" ONCLICK="javascript:sendLink(388865,'CTS.ppt');return false"><img src="http://web4bizl.med.firmenserver.de/llimages/pfeil.gif" border=0 alt="Link zum CMS &uuml;bertragen"></a><A HREF="" ONCLICK="javascript:showLink('388865&docTitle=CTS.ppt','CTS.ppt');return false"><img src="http://web4bizl.med.firmenserver.de/llimages/punkt.gif" border=0 alt="Link anzeigen">
</A>
</TD><TD NOWRAP ALIGN="right">125 KB&nbsp;</TD>
<TD NOWRAP ALIGN="center">2004-12-31 13:43</TD>
</TR>

Die einzelnen Elemente:
1 = <TR STYLE="background:#D3E2F1;">
2 = <TD NOWRAP WIDTH="1%">
3 = <A HREF="
4 = /
5 = basis-l
6 = /
7 = livelink.exe
8 = /
9 = CTS.ppt
10 = ?func=doc.Fetch
11 = &nodeId=388865&docTitle=CTS%2Eppt">
12 = <IMG SRC="https://livelink-dms.med.firmenserver.com/basis-l....f" WIDTH="8" HEIGHT="8" BORDER="0" ALT="">
13 = <IMG SRC="https://livelink-dms.med.firmenserver.com/basis-l....f" WIDTH="16" HEIGHT="16" BORDER="0" ALT="Document">
14 = </A>
15 = </TD>
16 = <TD SCOPE="rowgroup" NOWRAP>
17 = &nbsp;
18 = <A HREF="https://livelink-dms.med.firmenserver.com/basis-l....nodeId=
19 = 388865
20 = &docTitle=CTS%2Eppt">
21 = CTS.ppt
22 = </A>
23 =
24 = </TD>
25 = <TD NOWRAP ALIGN="CENTER" WIDTH="1%">
26 = <A HREF="" ONCLICK="javascript:showFunctionMenu('', 388865, event);return false">
27 = <IMG SRC="https://livelink-dms.med.firmenserver.com/basis-l....f" NAME="x388865" BORDER="0" ALT="Functions">
28 = </A>
29 = </TD>
30 = <TD NOWRAP ALIGN="right">
31 = 125 KB
32 = &nbsp;</TD>
33 = <TD NOWRAP ALIGN="center">
34 = 2004-12-31 13:43
35 = </TD>
36 = </TR>\n\n

<!--EDIT|ramseier|1107855535-->
lichtkind
 2005-02-08 11:40
#4288 #4288
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
eine technik wäre es den inhalt in variablen mit schönen namen zu stecken und diese in die regex einsetzen\n\n

<!--EDIT|lichtkind|1107856043-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
ramseier
 2005-02-08 13:34
#4289 #4289
User since
2005-02-08
6 Artikel
BenutzerIn
[default_avatar]
kann ich reguläre ausdrücke in Variablen stecken und dann in andere reguläre Ausdrücke einbinden?
ramseier
 2005-02-08 16:06
#4290 #4290
User since
2005-02-08
6 Artikel
BenutzerIn
[default_avatar]
es klappt immernoch nicht.. ich könnte heulen
esskar
 2005-02-08 16:11
#4291 #4291
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hast du denn keine möglichkeit, dass ganz hard zu coden?
Ich meine diese Ersetzungen kosten ja so oder so zeit!
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-02-08 10:59.