web-dev-qa-db-fra.com

Opérateur tilde dans les expressions régulières

Je veux savoir quelle est la signification de l'opérateur tilde dans les expressions régulières.

J'ai cette déclaration:

if (!preg_match('~^\d{10}$~', $_POST['isbn'])) {
    $warnings[] = 'ISBN should be 10 digits';
}

J'ai trouvé ce document expliquant ce que signifie tilde: ~

Il a dit que =~ est un opérateur Perl qui signifie exécuter cette variable sur cette expression régulière.

Mais pourquoi mon expression régulière contient-elle deux opérateurs tilde?

49
Keira Nighly

Dans ce cas, il est simplement utilisé comme délimiteur.

En général, en PHP, le premier et le dernier caractère d'une expression régulière sont des "délimiteurs" pour marquer la position de début et de fin d'une partie correspondante (au cas où vous voudriez ajouter des modificateurs à la fin, comme non légaux, etc.)

Généralement PHP cela fonctionne à partir du premier caractère dans une chaîne qui est conçue comme une expression régulière, en faisant correspondre la seconde occurrence comme deuxième délimiteur. Ceci est utile lorsque vous avez une occurrence de la délimiteur normal dans le texte (par exemple, les occurrences de / dans le texte) - cela signifie que vous n'avez pas à faire de choses maladroites.

Correspondance pour "// "avec le délimiteur défini sur" / "

/\/\//

Correspondance pour "// "avec le délimiteur de" # "

#//#

57
Mez

Dans ce cas, cela ne veut rien dire. Il s'agit simplement de délimiter le début et la fin de votre modèle. Dans PCRE (Perl Compatible Regular Expressions), qui est ce que vous utilisez avec preg_ * en PHP, le modèle est entré à côté des options d'expression, comme ceci:

preg_match("/pattern/opt", ...);

Cependant, l'utilisation de "/" comme délimiteur dans ce cas est arbitraire - bien que la barre oblique soit populaire, elle peut être remplacée par n'importe quoi. Dans votre cas, c'est tilde.

7
Nick