2009-06-02 9 views
44

Je veux savoir quelle est la signification de l'opérateur tilde dans les expressions régulières.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 par rapport à cette expression régulière.

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

Répondre

52

Dans ce cas, il s'agit simplement d'un délimiteur. En règle générale, en PHP, les premiers et derniers caractères 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 ungreedy, etc.)

Généralement, PHP extrait ceci du premier caractère d'une chaîne qui est considéré comme une expression régulière, correspondant à la deuxième occurence de celui-ci en tant que second délimiteur. Ceci est utile lorsque vous avez une occurrence du délimiteur normal dans le texte (par exemple, les occurrences de / dans le texte) - cela signifie que vous n'avez pas à faire des choses gênantes.

Matching pour "//" avec le séparateur réglé sur "/"

/\/\//

Matching pour "//" avec le séparateur de "#"

#//#

+1

ic, je suis habitué au/delimiter donc j'ai été un peu confondu avec le ~ délimiteur. Merci de clarifier. –

+0

Ceci s'applique uniquement à PCRE http://docs.php.net/manual/fr/book.pcre.php et non à POSIX ERE http://docs.php.net/manual/fr/book.regex.php – Gumbo

6

Dans ce cas, cela ne veut rien dire. Il délimite simplement le début et la fin de votre modèle. Dans PCRE (Perl Compatible Les expressions régulières), qui est ce que vous utilisez avec preg_ * en PHP, le modèle est entrée le long du côté des options d'expression, comme ceci:

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

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

+0

Oh, Ok .. J'ai l'expression régulière du livre .. Ils n'ont pas expliqué ce que ça voulait dire. Donc était confus un peu. J'essayais juste de clarifier les choses parce que je suis confus. Merci! –

+0

'/' est populaire parce que c'est le délimiteur standard pour les expressions régulières Perl, ce qui est ce que preg signifie;) –

Questions connexes