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



#!/COMMUNITY

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




12.02.2012 / 04:12

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


BeitragErsetzen von Schlagworten
Seitenanfang
Hallo,

ich möchte mit meinem Prog ein Dokument(DOC) anhand einer Schlagwortliste(@list) durchsuchen. Alle Schlagwörter 'x' sollen durch '[[x | x]]' ersetzt werden.


foreach $key(@list) {
while (<DOC>) {
$line = $_;
$line =~ s/$key/[[$key | $key]]/gi
print OUT "$line";
}

Mein Problem ist nun, dass die Liste auch Schlagwörter wie 'al' oder 'c012' enthält. Dadurch werden auch normale Wörter wie z.B. 'Hallo' in 'H[[al | al]lo' oder Farbcodierungen o.ä. transformiert. Ausdrücke wie '(al=' sollten jedoch gefunden und ersetzt werden.

An der Stelle komme ich nicht weiter. Weiß jemand von euch eine Möglichkeit, wie ich solche Fälle ausschließen kann? Eventuell indem ich die Zeichen vor und nach dem Schlagwort im Dokument untersuche und nur ersetze, wenn diese Zeichen nicht aus weiteren Buchstaben oder Zahlen bestehen?...

Danke für die Hilfe,

Gruß Iris

Datum: 10.01.2008-12:27

Beitragre: Ersetzen von Schlagworten
Seitenanfang
Hallo!

Versuche doch mal

$line =~ /(?<!\w)$key(?!\w)/blub/gi;

In dem Fall wird ein Wort nur ersetzt, wenn weder vorher noch nachher ein [a-zA-Z0-9_] (=\w) steht. Natürlich kannst du die vorher und nachher "verbotenen" Zeichen per [...] definieren, wie du es brauchst.

Grüße, Skrilax

Datum: 10.01.2008-15:43

Beitragre: Ersetzen von Schlagworten
Seitenanfang
Du hast das 's' in der Zeile vergessen
$line =~ /(?<!\w)$key(?!\w)/blub/gi;

aber danach hat's funktioniert. Danke, genau das, was ich gesucht habe!
Kannst du das '(?<!\w)' auch noch kurz näher erklären? Danke

Gruß Iris

Datum: 10.01.2008-20:36

Beitragre: Ersetzen von Schlagworten
Seitenanfang
Hallo!

\w ist einfach nur ein Synonym für [a-zA-Z0-9_], steht also für alle alphanumerische Zeichen und den Tiefstrich. [1]

Bei (?<!) oder (?!) handelt es sich um Befehle, mit denen du die Umgebung eines Suchmusters definierst. Siehe http://perl-seiten.homepage.t-online.de/html/perl_reg.html#abs7

Grüße, Skrilax

[1] Unter Umständen kann \w noch mehr sein. Mit dem "use utf8"-pragma (wenn der Quellcode auch in utf-8 gespeichert wird) matcht \w (in einem utf-8 kodierten Text) z.B. auch Umlaute wie ü, ä, ß usw.

Datum: 11.01.2008-11:21

Beitragre: Ersetzen von Schlagworten
Seitenanfang
Du hast das 's' in der Zeile vergessen
$line =~ s/(?<!\w)$key(?!\w)/blub/gi;

aber danach hat's funktioniert. Danke, genau das, was ich gesucht habe!
Kannst du das '(?<!\w)' auch noch kurz näher erklären? Danke

Gruß Iris

Datum: 10.01.2008-20:36

-






-
-