Portál AbcLinuxu, 26. dubna 2024 22:04


Dotaz: Perl: problém s češtinou v regexpu

13.4.2008 22:23 Herry
Perl: problém s češtinou v regexpu
Přečteno: 1970×
Odpovědět | Admin
Dobrý den,
mám problém s češtinou v regulárních výrazech,
/\w/ "nesežere" některé znaky s diakritikou v kódování UTF8.

Příklad:

#!/usr/bin/perl -w

use utf8;
use locale;
use encoding 'utf-8';

binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";

print "ě>$1<\n" if "ě" =~ /(\w)/;
print "š>$1<\n" if "š" =~ /(\w)/;
print "č>$1<\n" if "č" =~ /(\w)/;
print "ř>$1<\n" if "ř" =~ /(\w)/;
print "ž>$1<\n" if "ž" =~ /(\w)/;
print "ý>$1<\n" if "ý" =~ /(\w)/;
print "á>$1<\n" if "á" =~ /(\w)/;
print "í>$1<\n" if "í" =~ /(\w)/;
print "é>$1<\n" if "é" =~ /(\w)/;

Výraz /(\w)/ projde jenom pro ě,š,č,ř,ž

locales mám nastaveno na:

LANG=cs_CZ.UTF-8
LC_CTYPE="cs_CZ.UTF-8"
LC_NUMERIC="cs_CZ.UTF-8"
LC_TIME="cs_CZ.UTF-8"
LC_COLLATE="cs_CZ.UTF-8"
LC_MONETARY="cs_CZ.UTF-8"
LC_MESSAGES="cs_CZ.UTF-8"
LC_PAPER="cs_CZ.UTF-8"
LC_NAME="cs_CZ.UTF-8"
LC_ADDRESS="cs_CZ.UTF-8"
LC_TELEPHONE="cs_CZ.UTF-8"
LC_MEASUREMENT="cs_CZ.UTF-8"
LC_IDENTIFICATION="cs_CZ.UTF-8"
LC_ALL=

Někde jsem našel řešení něco jako /(\p{L})/, ale nikde jsem se nedočetl co to přesně znamená a proč to původní řešení nefunguje přestože je to uvedeno v mnoha návodech.

Díky za odpovědi

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.4.2008 23:06 Hery
Rozbalit Rozbalit vše Dodatek
Odpovědět | | Sbalit | Link | Blokovat | Admin

/(\p{L})/ nespolkne číslice, potřeboval bych něco na alfanumerický znaky.

osladil avatar 14.4.2008 08:49 osladil | skóre: 12
Rozbalit Rozbalit vše Re: Perl: problém s češtinou v regexpu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, v jenom skriptu pouzivam neco podobneho. Zkousel jsem to ted na tomhle:
#!/usr/bin/perl

use strict;
use warnings;
use utf8;

binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

my $string = "Čeština je ČESKÁ";
$string =~ /(\w+)/;
my ($result) = ($1);

print "Hledam v $string\n";
print "Nalezeno $result\n";

print "Čeština je cool!\n" if $result eq "Čeština";
Moje locales:
mira@batman:~$ env|grep LANG
LANG=en_US.UTF-8
zoul avatar 14.4.2008 09:19 zoul | skóre: 43 | blog: | Boskovice
Rozbalit Rozbalit vše Re: Perl: problém s češtinou v regexpu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně to funguje:
perl -e "use locale; print 'Yep' if ('ý' =~ /\w/)"
Yep
OS X 10.5.2, Perl 5.8.8, locale en_US.UTF-8. Možná zkus nastavit ještě LC_ALL?
20.9.2008 17:22 harry
Rozbalit Rozbalit vše Re: Perl: problém s češtinou v regexpu
Odpovědět | | Sbalit | Link | Blokovat | Admin
RESENI

doinstaloval jsem nejaky baliky, uz nevim ktery presne zabral:

language-pack-cs
language-gnome-cs
language-support-cs
language-translate-cs

reinstaloval jsem locale

sudo apt-get install --reinstall locales

a potom to zaclo fungovat:

LC_ALL=en_US.UTF-8 perl -C -Mutf8 -e '$_="aábcčdďeěéfghiíjklmnňoópqrřsštťuúůvwxyýzž"; s/\W/-/g; print $_, "\n"'

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.