/ / Correspondance d'une chaîne contenant des caractères spéciaux avec regex en perl - regex, perl

Faire correspondre une chaîne contenant des caractères spéciaux avec une expression régulière dans perl - regex, perl

J'ai une ligne dans mon fichier qui contient la chaîne suivante

$print = "SM_sdo_debugss_cxct6_CSCTM_4 csctm_gen[4]_ctm_i_nctm_I_csctm  (4+5)";
$my_meta = "csctm_gen[4]_ctm_i_nctm_I_csctm";
print "I got thisn" if($print =~ /Q$my_metaE/);

Mais c’est impossible de trouver le $my_meta chaîne dans $print. Pourquoi?

Réponses:

0 pour la réponse № 1

Votre première chaîne est entre guillemets, les séquences d'échappement avec une barre oblique inversée sont donc traitées.

cs représente Ctrl-S, qui peut également être écrit chr(19) ou "x13".

Votre deuxième chaîne est entre guillemets simples, ce qui ignore les échappements avec une barre oblique inversée (sauf \ et ").

Donc, votre regex finit par chercher une séquence de 3 caractères c s, mais votre chaîne cible contient un seul octet 0x13.

Pour résoudre ce problème, écrivez "... \cs ..." dans votre première chaîne (la première barre oblique inverse échappe à la seconde), ou utilisez des guillemets simples pour votre première chaîne ("... cs ...").