perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 29
Click for quality!




10.02.2012 / 08:54

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragKlammern erkennen in REGEX
Seitenanfang
Ich habe schon immer Probleme gehabt, wenn Klammern erkannt werden sollten.
Ein Beispiel von heute:
Ich hatte eine Wortliste, nach ABC geordnet, allerdings mit Zeilen dazwischen, die ich nicht haben wollte. Meine Idee war, die Zeilen herauszufischen, die nicht mit einem bestimmten Buchstaben beginnen. Dazu hatte ich in der Ausgangsdateien jeweils Markierungen angebracht:
#a
aber
?§ieieo<jkj>
Auto
#b
...
Das Programm ging dann so:
[code]
if($line=~ /#(.)/){
$anfangsbuchstabe = $1;
next;
}
if($line =~ /^$anfangsbuchstabe/){
print HIER "$line\n";
}else{
print DA "$line\n";
}

OK, das lief soweit ganz gut. Jetzt aber das Problem: Im Ausgangstext gab es auch solche Zeilen:
(ein) Auto
(eine) Frau
jksdrfjlsd(;=
(ein) Ei

entsprechend habe ich hier es so markiert:
#(
(ein) Auto
...

Wenn das Programm an die erste runde Klammer kommt, bekomme ich eine Meldung, dass die Klammer nicht matchen würde und bricht ab. Perl sieht das als Metazeichen an, nicht als Literal. Wie gehe ich mit solchen Klammern um?
(In meiner Not habe ich bisher diese Troublemaker einfach ersetzt durch etwas anderes, aber das ist nicht so elegant).

Vielen Dank im Voraus

Felix

Datum: 21.07.2005-17:16

Beitragre: Klammern erkennen in REGEX
Seitenanfang
Hi,

Klammern müssen mit Backslashes abgeschaltet werden, damit sie als Suchbegriff erkannt werden.


my $var =~ s/^(.*) \((.*)\) \((.*)\)$/$1 $2 $3/;

Aus

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050517 Firefox/1.0.4 (Debian package 1.0.4-2)

wird dann

Mozilla/5.0 X11; U; Linux i686; en-US; rv:1.7.8 Gecko/20050517 Firefox/1.0.4 Debian package 1.0.4-2

-uw

Datum: 21.07.2005-17:31

Beitragre: Klammern erkennen in REGEX
Seitenanfang
Vielen Dank für die Antwort. Um aus Metazeichen Literale zu machen nimmt man Backslashes - OK.

Allerdings habe ich das Problem zunächst nicht innerhalb der Regex, sondern mit Klammern, die in der Ausgangsdatei sind. Perl erkennt die erste Klammer in der Ausgangsdatei und tut dann so, als stünde die Klammer in der Regex ... obwohl sie das ja eigentlich NICHT tut.

Datum: 21.07.2005-17:49

Beitragre: Klammern erkennen in REGEX
Seitenanfang
OK,

dann solltest Du den Inhalt der/s Variable/Arrays, in die/den die Datei eingelesen wurde, erst auf Klammern untersuchen und ihnen ein Backslash voranstellen.


my $tmp = "Pius (I.)";
$tmp =~s/([\(\)])/\\$1/g;

Aus "Pius (I.)" wird dann "Pius \(I.\))".

-uw

Datum: 21.07.2005-23:25

BeitragNachtrag
Seitenanfang
Sorry, eine Klammer zu viel.

Aus "Pius (I.)" wird dann natürlich "Pius \(I.\)".

Datum: 21.07.2005-23:27

Beitragre: Nachtrag
Seitenanfang
Klingt nicht schlecht - ich werde es mal ausprobieren. Ich melde dann nochmal zurück, wie es gegangen ist. Allerdings kann ich das erst wieder ab Montag.
Vielen Dank bis dahin erstmal.

Felix

Datum: 22.07.2005-07:50

-






-
-