$text_to_search = "example text with [foo] and more";
$search_string = "[foo]";
if ($text_to_search =~ m/$search_string/)
print "wee";
Veuillez respecter le code ci-dessus. Pour une raison quelconque, j'aimerais trouver le texte "[foo]" dans la variable $ text_to_search et imprimer "wee" si je le trouve. Pour ce faire, je devrais m'assurer que [et] est remplacé par [et] pour que Perl le traite comme des caractères plutôt que comme des opérateurs.
Comment puis-je faire cela sans avoir à remplacer au préalable [
et ]
avec \[
et \]
utilisant un s///
expression?
Utilisation \Q
pour créer automatiquement un caractère potentiellement problématique dans votre variable.
if($text_to_search =~ m/\Q$search_string/) print "wee";
Utilisez la fonction quotemeta
:
$text_to_search = "example text with [foo] and more";
$search_string = quotemeta "[foo]";
print "wee" if ($text_to_search =~ /$search_string/);
Vous pouvez utiliser quotemeta (\Q \E)
si votre version de Perl est la version 5.16 ou ultérieure, mais si vous utilisez une configuration inférieure à celle-ci, vous pouvez simplement éviter d'utiliser une expression régulière.
Par exemple, en utilisant la commande index
:
if (index($text_to_search, $search_string) > -1) {
print "wee";
}