Ersetzen 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

|
re: 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

|
re: 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? DankeGruß Iris
Datum: 10.01.2008-20:36

|
re: 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

|
re: 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? DankeGruß Iris
Datum: 10.01.2008-20:36

|