2015-12-26 4 views
0

J'ai ce (allemand) exemple chaîneRegEx ne correspond pas à Perl: Pourquoi?

Gesundheit und einen besseren Fußball- u. Musikgeschmack!

Je veux faire correspondre les mots qui sont reliés par - u.

Dans ce cas, je veux la faire correspondre Fußball- u. Musikgeschmack j'ai écrit une expression RegEx qui fait exactement cela, mais il semble fonctionner différemment si je l'exécute dans le cadre d'un script Perl.

Mon RegEx est la suivante: [ |^]*([A-Za-zÄäÖöÜüß]+[\-\\][ ]*[u][\.][A-Za-zÄäÖöÜüß ]+) Selon ce site qui permet RegEx interactive tester sélectionne ce qu'il doit: https://regex101.com/r/tN6gB4/1

Qu'est-ce que perl me donne est ball- u. Musikgeschmack

J'ai le caractère spécial allemand ß dans la bloc qui correspond ball donc je ne comprends pas pourquoi il ne correspond pas Fußball

+0

Avez-vous utilisé 'use utf8;'? BTW, '[| ^] *' correspond à un espace, ou à un tuyau ou à un symbole d'insertion, 0 fois ou plus. Je pense que vous vouliez juste '(?:^| *)'. Ou même '\ b'. –

+0

Merci c'est le problème! – toobee

Répondre

0

En effet, @stribizhev semble avoir raison, c'est use utf8; problème: ce pragma indique que les littéraux de chaîne dans le fichier source sont encodés en utf8 et permettent ainsi à Perl de les décoder en Unicode et de fonctionner correctement.

use utf8; 
binmode(STDOUT, ":utf8"); 

$s = "Gesundheit und einen besseren Fußball- u. Musikgeschmack!"; 

$s=~/[ |^]*([A-Za-zÄäÖöÜüß]+[\-\\][ ]*[u][\.][A-Za-zÄäÖöÜüß ]+)/; 
print($1) 

Sortie:

Fußball- u. Musikgeschmack 

Voir aussi perlunicode pour plus de détails.