[Perl] unerlaubte Zeichen aus einem String entfernen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
coresploit
Beiträge: 237
Registriert: 26.04.2009 01:57:27
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nettetal
Kontaktdaten:

[Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von coresploit » 10.12.2009 15:31:32

Guten Tag,

ich habe einen Perl-String $str, welcher einige Sonderzeichen enthalten könnte. Ich möchte aber, dass er nur A-Za-z0-9#.-_ enthält. Gibt es eine Möglichkeit, wie ich den String bereinigen kann, dh., alle anderen Zeichen zu entfernen?

Danke.

Benutzeravatar
hikaru
Moderator
Beiträge: 13931
Registriert: 09.04.2008 12:48:59

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von hikaru » 10.12.2009 15:54:54

Vielleicht so?

Code: Alles auswählen

$str =~ s/[^A-Za-z0-9#\.\-_]//g;

coresploit
Beiträge: 237
Registriert: 26.04.2009 01:57:27
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nettetal
Kontaktdaten:

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von coresploit » 10.12.2009 16:21:38

danke, läuft super!

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von nepos » 10.12.2009 16:23:31

Dafür ist eigentlich tr// gedacht:

Code: Alles auswählen

$str =~ tr/A-Za-z0-9#.-_//cd;

coresploit
Beiträge: 237
Registriert: 26.04.2009 01:57:27
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nettetal
Kontaktdaten:

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von coresploit » 10.12.2009 17:06:48

Nett, aber jetzt möchte ich natürlich auch noch Akzente von den Buchstaben entfernen. Dafür habe ich sowas hier gebastelt:

Code: Alles auswählen

	# remove accents	
	$str =~ y/ÀÁÂÃÄÅĂĄàáâãäåăą/AAAAAAAAaaaaaaaa/;
	$str =~ y/ÇĆČçćč/CCCccc/;
	$str =~ y/ĎĐďđ/DDdd/;
	$str =~ y/ÈÉÊËĘĚèéêëęě/EEEEEEeeeeee/;
	$str =~ y/Ğğ/Gg/;
	$str =~ y/ÌÍÎÏİìíîïı/IIIIIiiiii/;
	$str =~ y/ĹĽŁĺľł/LLLlll/;
	$str =~ y/ÑŃŇñńň/NNNnnn/;
	$str =~ y/ÒÓÔÕÖØŐòóôõöøő/OOOOOOOooooooo/;
	$str =~ y/ŔŘŕř/RRrr/;
	$str =~ y/ŚŞŠśşš/SSSsss/;
	$str =~ y/ŢŤţť/TTtt/;
	$str =~ y/ÙÚÛŲÜŮŰùúûųüůű/UUUUUUUuuuuuuu/;
	$str =~ y/Ýýÿ/Yyy/;
	$str =~ y/ŹŻŽźżž/ZZZzzz/;
Das funktioniert aber nicht! Ich weiß auch nicht, warum.

EDIT: Gibt es eine Möglichkeit, wie man die Sonderzeichen in die Hexadezimalschreibweise (\x) konvertieren kann?

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von chrisbra » 10.12.2009 20:51:54

vwochnik hat geschrieben: EDIT: Gibt es eine Möglichkeit, wie man die Sonderzeichen in die Hexadezimalschreibweise (\x) konvertieren kann?
So?

Code: Alles auswählen

$ echo 'äöüßabz' | perl -pne 's/[^A-Za-z0-9]/sprintf("%x", ord($&))/eg'
e4f6fcdfabza
Meine Whishlist
:wq!

coresploit
Beiträge: 237
Registriert: 26.04.2009 01:57:27
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nettetal
Kontaktdaten:

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von coresploit » 10.12.2009 22:00:31

Wie kann ich die Hex-Codes denn dann durch normale Buchstaben ersetzen. Ein Beispiel wäre sehr hilfreich.

Danke.

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von chrisbra » 10.12.2009 22:29:49

vwochnik hat geschrieben:Wie kann ich die Hex-Codes denn dann durch normale Buchstaben ersetzen. Ein Beispiel wäre sehr hilfreich.
Ähm, was genau willst Du denn nun?
Meine Whishlist
:wq!

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: [Perl] unerlaubte Zeichen aus einem String entfernen

Beitrag von chrisbra » 10.12.2009 22:48:09

vwochnik hat geschrieben:Nett, aber jetzt möchte ich natürlich auch noch Akzente von den Buchstaben entfernen. Dafür habe ich sowas hier gebastelt:

Das funktioniert aber nicht! Ich weiß auch nicht, warum.
Funktioniert hier übrigens einwandfrei.
Meine Whishlist
:wq!

Antworten