Schrift
[thread]5935[/thread]

Regulärer Ausdruck -> alles außer: Regulärer Ausdruck im Regulären Ausdruck



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2003-11-29 19:23
#73420 #73420
Hi Perl-Community,

ich habe ein kleines Problem mit regulären Ausdrücken:

Ich möchte ein dynamisches Dokument parsen, und alles außer einem bestimmten regulären Ausdruck löschen. Gibt es eine Funktion "alles außer" in Regulären Ausdrücken? Allerdings wäre dieses alles außer auch ein Regulärer Ausdruck.
Oder ist es vielleicht möglich, das was in einem Ausdruck matched in einer Variable zu speichern, bevor es weggefressen wird?

Ich hoffe Ihr könnt mir helfen ...

Ciao
Crian
 2003-11-29 19:28
#73421 #73421
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Hilft Dir vielleicht !~ statt =~ ?

Oder Du machst einfach ein

Code: (dl )
1
2
$text =~ m~(MEINREGULÄRERAUSDRUCK)~;
$text = $1;


oder

Code: (dl )
($text) = $text =~ m~(MEINREGULÄRERAUSDRUCK)~;
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
anti
 2003-11-29 19:50
#73422 #73422
User since
2003-11-29
155 Artikel
BenutzerIn
[default_avatar]
Hi - danke für die schnelle Antwort!

Leider hat das alles nicht funktioniert.
Ich möchte von einer frei wählbaren Webseite alle Links in eine Datei schreiben. Mein regulärer Ausdruck dazu sieht wie folgt aus:
Code: (dl )
$a =~ s/<a.+\/a>/ /g;
In $a habe ich die ganze Website per LWP geladen. Verwende ich nun den regulären Ausdruck, habe ich alles außer den Links. Ich will allerdings genau das Gegenteil erreichen.
Vielleicht habt Ihr eine Idee.

ciao
format_c
 2003-11-29 20:31
#73423 #73423
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Probier mal:
Code: (dl )
1
2
3
my @results = $a =~ m#<a.+/a>#g;
local $" = "\n";
print @results;

(ungetestet)

Gruß Alex\n\n

<!--EDIT|format_c|1070130759-->
Crian
 2003-11-29 21:54
#73424 #73424
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=anti,29.11.2003, 18:50]Ich möchte von einer frei wählbaren Webseite alle Links in eine Datei schreiben.[/quote]
Nimm das Modul HTML::Parser (siehe http://search.cpan.org/~gaas/HTML-Parser-3.34/Parser.pm )
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
anti
 2003-11-30 13:30
#73425 #73425
User since
2003-11-29
155 Artikel
BenutzerIn
[default_avatar]
Hi - danke für die Hilfe,

mit dem HTML::Parser hat es auch alles prima geklappt. Allerdings würde mich das Problem grundsätzlich schon mal interessieren.
Ist es denn nicht möglich, einen String mit einem regulären Ausdruck zu durchsuchen, und alles was matched zurückzugeben?
Also ich dachte mir das so:
Code: (dl )
1
2
$a =~ /RegulärerAusdruck/g;
print "Dazu wurde gefunden: ".$...

-> so dass ich als Ausgabe dann einfach alle "Teilstrings" bekomme, die ich über den regulären Ausdruck gefunden habe, sprich wenn ich nach allem suche was mit a anfängt und b aufhört, dann möchte ich eine Ausgabe, dir mir alle passenden Wörter aus dem String dazu ausgibt.

Vielleicht habt Ihr eine Idee ...

ciao
renee
 2003-11-30 13:43
#73426 #73426
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
my (@found) = $string =~ /(RegEx)/g;
print $_,"\n" for(@found);

ungetestet\n\n

<!--EDIT|renee|1070192678-->
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/
anti
 2003-11-30 14:03
#73427 #73427
User since
2003-11-29
155 Artikel
BenutzerIn
[default_avatar]
Klasse - jetzt hat es funktioniert! Ich dachte so etwas hätte ich schon probiert - naja - Vielen Dank auf jeden Fall an alle Helfer!!

ciao
Crian
 2003-11-30 15:08
#73428 #73428
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=renee,30.11.2003, 12:43]
Code: (dl )
1
2
my (@found) = $string =~ /(RegEx)/g;
print $_,"\n" for(@found);

ungetestet[/quote]

und was ist daran wohl besser als an

[quote=Crian,29.11.2003, 18:28]
Code: (dl )
1
2
$text =~ m~(MEINREGULÄRERAUSDRUCK)~;
$text = $1;

[/quote]

[quote=anti,30.11.2003, 13:03]Klasse - jetzt hat es funktioniert! Ich dachte so etwas hätte ich schon probiert - naja - Vielen Dank auf jeden Fall an alle Helfer!!

ciao[/quote]

Hmm dann hast Du meinen Vorschlag vorher nicht (richtig) ausprobiert ^^
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2003-11-30 15:51
#73429 #73429
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=anti,30.11.2003, 12:30]mit dem HTML::Parser hat es auch alles prima geklappt. Allerdings würde mich das Problem grundsätzlich schon mal interessieren.
Ist es denn nicht möglich, einen String mit einem regulären Ausdruck zu durchsuchen, und alles was matched zurückzugeben?[/quote]
klar - aber HTML zu parsen ist komplexer als man annehmen möchte. deswegen
benutzt man vernünftigerweise ein modul, das dieses problem schon gelöst
hat und macht nicht alles nochmal selbst. (es sei denn, man hat zuviel zeit und
schreibt das programm für sich selbst, oder man macht es zu lernzwecken. aber
zum lernen könnte man sich das parser-modul auch einmal von innen anschauen.)
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
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2003-11-29 19:23.