2009-06-02 39 views
44

Quiero saber cuál es el significado del operador tilde en expresiones regulares.Operador Tilde en expresiones regulares

que tienen esta declaración:

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

yo encontramos este documento que explica lo que significa tilde: ~

Se dice que =~ es un operador de Perl que significa ejecutar esta variable en contra de esta expresión regular.

¿Pero por qué mi expresión regular contiene dos operadores de tilde?

Respuesta

52

En este caso, solo se está utilizando como delimitador.

Generalmente, en PHP, los primeros y últimos caracteres de una expresión regular son "delimitadores" para marcar la posición inicial y final de una porción coincidente (en caso de que desee agregar modificadores al final, como singregar, etc.)

Generalmente, PHP funciona esto desde el primer caracter en una cadena que se entiende como una expresión regular, haciendo coincidir la segunda ocurrencia de la misma como el segundo delimitador. Esto es útil cuando tiene una ocurrencia del delimitador normal en el texto (por ejemplo, ocurrencias de / en el texto) - esto significa que no tiene que hacer cosas incómodas.

Matching para "//" con el delimitador ajustado a "/"

/\/\//

Matching para "//" con el delimitador de "#"

#//#

+1

ic, estoy acostumbrado al delimitador/así que estaba un poco confundido con el ~ delimitador. Gracias por aclararlo. –

+0

Esto solo se aplica a PCRE http://docs.php.net/manual/en/book.pcre.php y no a POSIX ERE http://docs.php.net/manual/en/book.regex.php – Gumbo

6

En este caso, no significa nada. Simplemente delimita el inicio y el final de su patrón. En PCRE (Perl Compatible Regular Expressions), que es lo que se está usando con preg_ * en PHP, el patrón es de entrada al lado de las opciones de expresión, así:

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

Sin embargo, el uso de "/" como el delimitador en este caso es arbitrario, aunque la barra diagonal es popular, puede reemplazarse por cualquier cosa. En tu caso, es tilde.

+0

Oh, vale ... Obtuve la expresión regular del libro ... No explicaron lo que significaba. Así que estaba un poco confundido. Solo estaba tratando de aclarar las cosas porque estoy confundido. ¡Gracias! –

+0

'/' es popular porque es el delimitador estándar para las expresiones regulares de perl, que es lo que significa preg;) –

Cuestiones relacionadas