Schrift
[thread]9127[/thread]

RegEx-Wahnsinn: Teilstring extrahieren



<< >> 7 Einträge, 1 Seite
Magic
 2007-06-27 11:24
#77876 #77876
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Moin zusammen,
ich begreifs mal wieder nicht. Ich habe einen String, vielmehr eine HTML-Tabelle. Die Tabelle enthält Spalten wie diese
Code: (dl )
1
2
<td style="width: 39px; padding-left: 17px;" onMouseover="return escape('GESUCHTER TEXT');"
<table celpadding=0 cellspacin........>

Ich versuche jetzt seit geraumer Zeit, die Stelle "GESUCHTER TEXT" aus dem ganzen zu extrahieren und scheitere bei jedem neuen Versuch noch kläglicher. Mein aktueller Ansatz vor der Irrenanstalt ist:
Quote
my ( @text ) = $tabelle =~ /return escape\(\'(.*?)\'\)/isg;


Gehts ganz kläglich in die Buchse und nix geht mehr.

Hat wer ne Idee wo der Fehler liegt und kann mir ne Lösung bieten? Ne Erklärung warum mein Ansatz nicht funktioniert wäre auch klasse.

Grüße,
Stefan

Dieser Ansatz gibt mir
Quote
('xxx');">
<('xxx');">
<('xxx');">
<('xxx');">
<('xxx');">
<('xxx');">
<(xxx');">


Wenn ich versuche nur den Inhalt zwischen den '' zu extrahieren, also z.b. mit
Code: (dl )
escape(.*?)ta
\n\n

<!--EDIT|Magic|1182929088-->
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
pktm
 2007-06-27 11:45
#77877 #77877
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Steht *immer* etwas an dieser Stelle? Dann kannst du auch mit .+ suchen.
Das ? nach .* bei dir verstehe ich nicht, was willst du damit ausdrücken?
Wenn du genau weist, dass es sich nur um Text handelt kannst du die Suche auch mit Zeichenklassen vornehmen: \(([\w\s])+\)

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Magic
 2007-06-27 11:52
#77878 #77878
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich weiss nicht ob da immer Text drin steht oder ob auch schonmal was anderes drin stehen kann...
Die Daten kommen nicht von mir, deshalb muss ich so weit wie möglich variabel arbeiten.

Gruß,
Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
renee
 2007-06-27 11:59
#77879 #77879
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pktm,27.06.2007, 09:45]Hallo!

Steht *immer* etwas an dieser Stelle? Dann kannst du auch mit .+ suchen.
Das ? nach .* bei dir verstehe ich nicht, was willst du damit ausdrücken?
Wenn du genau weist, dass es sich nur um Text handelt kannst du die Suche auch mit Zeichenklassen vornehmen: \(([\w\s])+\)

Grüße, pktm[/quote]
Das ? ist da schon sinnvoll. Falls irgendwo später in dem HTML-String ein ') vorkommen sollte, würde sonst die längste Möglichkeit genommen. Stichwort: greedyness

vgl.

Code (perl): (dl )
1
2
3
4
5
my ($var) = 'Dies ist ein Test' =~ /D(.*)es/;
print $var,"\n";
# vs.
my ($var) = 'Dies ist ein Test' =~ /D(.*?)es/;
print $var,"\n";
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/
pktm
 2007-06-27 12:01
#77880 #77880
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, ich habe das jetzt mal ausprobiert, bei mir geht das:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use Data::Dumper qw/Dumper/;

my $tabelle = qq~
<td style="width: 39px; padding-left: 17px;" onMouseover="return escape('GESUCHTER TEXT');"
<table celpadding=0 cellspacin........>
~;

my ( @text ) = $tabelle =~ /return escape\(\'(.*?)\'\)/isg;

print Dumper \@text;


Ergebnis:
Quote
> Executing: C:\Programme\ConTEXT\ConExec.exe "C:\Perl\bin\perl.exe" "C:\Apache\cgi-bin\sometest.pl"

$VAR1 = [
         'GESUCHTER TEXT'
       ];
> Execution finished.


Wie gewinnst du denn die Zeile die du als Beispiel angegeben hast?
Steht da genau das drin? Lass es dir einfach mal ausgeben.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2007-06-27 12:04
#77881 #77881
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also das hier funktioniert bei mir:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;

my $html = q~<td style="width: 39px; padding-left: 17px;" onMouseover="return escape('GESUCHTER TEXT');"
<table celpadding=0 cellspacin........>~;

my @text = $html =~ /return\s*escape\('(.*?)'\)/isg;
print $_,"\n" for @text;
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/
Magic
 2007-06-27 14:31
#77882 #77882
User since
2003-09-30
91 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke allen,
der Ansatz von Renee funktioniert.

Grüße,
Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.
<< >> 7 Einträge, 1 Seite



View all threads created 2007-06-27 11:24.