2009-10-12 5 views
4

Je suis actuellement bloqué pour obtenir une expression régulière en Perl (tirée d'un earlier question) pour faire correspondre des caractères de mot provenant d'un environnement local non-ASCII (par exemple, les trémas allemands) .Expressions régulières Perl tenant compte des paramètres régionaux (limites de mots correspondants)

J'ai déjà essayé différentes choses telles que définir les paramètres régionaux corrects (en utilisant setlocale), convertir les données que je reçois de MySQL en UTF8 (en utilisant decode_utf8), et ainsi de suite ... Malheureusement, en vain. Google n'a pas aidé beaucoup.

Est-il possible d'obtenir les paramètres régionaux conscients regex suivant afin que

$street = "Täststraße"; # I know that this is not orthographically correct 
$street =~ s{ 
       \b (\w{0,3}) (\w*) \b 
      } 
      { 
       $1 . ('*' x length $2) 
      }gex; 

finit par retourner $street = "Täs*******" au lieu de "Tästs***ße"?

Répondre

6

Je m'attendrais à ce que la regex aboutisse à "Täs *******". Et c'est ce que j'ai quand j'utilise utf8 dans un fichier encodé en utf-8 avec le code ci-dessus.

(.. Si tout est latin-1, qui modifie le comportement du moteur regex D'où l'existence de utf8::upgrade Voir Unicode::Semantics.)

Edit: Je vois que vous fixe votre poste et que nous sommes d'accord sur le prévu résultat. Fondamentalement, utilisez Unicode :: Semantics lorsque vous voulez une sémantique Unicode sur vos expressions rationnelles.

+0

C'est bizarre ... Lorsqu'il est exécuté de manière autonome, le code fonctionne bien. Il s'avère que "use locale" a brisé des choses ... Une fois que j'ai enlevé que tout est revenu à la normale. –

+0

Ouais, "use locale" devrait être évité. "use utf8" si vous avez des littéraux utf8 dans le code source utf8. Sinon, gérez le codage avec Encode et utilisez Unicode :: Semantics lorsque cela est justifié. – jrockway

+0

Est-ce que "use locale" est une mauvaise idée en toutes circonstances? Est-ce/devrait-il être déprécié? – Ether

Questions connexes