2011-08-09 13 views
5

¿El símbolo "@" a veces se usa para rodear una expresión regular de PHP? Estoy trabajando con una base de código y encontramos esta llamada de función:@ (at) símbolos función preg_replace

$content = preg_replace("@(</?[^>]*>)[email protected]", "", $content); 

Creo que es la eliminación de todas las etiquetas XML de la cadena, pero no estoy seguro de lo que el símbolo "@" en Hay medios.

Respuesta

5

Sí, se puede usar para ajustar la expresión. Es muy probable que el autor original haga esto porque algunas (o varias) expresiones contienen el delimitador "más tradicional" /. Al usar @, ahora puede usar / sin la necesidad de escapar de él.

que puede usar:

+3

(excepto que no es) –

+0

@Henning: Eso puede ser el "garbanzo negro". Dada la presencia de caracteres HTML, es probable que otras expresiones (también encontradas dentro de ese archivo) tengan alguna forma de '/' (por ejemplo, busque ''). Pero estás en lo cierto, no '/' en _esta _ expresión. –

+0

Typo de mi parte, estaba destinado a ser una barra inclinada y no una barra diagonal inversa. Probablemente estés en lo cierto en cuanto a por qué eligieron el personaje @. – patorjk

1

Usted puede utilizar casi cualquier carácter puntuacion como delimitador en PHP regulares expresiones. See the docs here. Generalmente, el / es la primera opción (y hubiera sugerido su uso aquí), pero si su expresión regular contiene barras, un carácter diferente puede ser útil.

En su mayoría, he visto %...%, ~...~ y #...#, pero @[email protected] está bien, también.

2

El manual los llama el PCRE "delimiters". Se puede usar cualquier símbolo ASCII (no alfanumérico) (excepto el byte nulo).

Las alternativas comunes a / son ~ y #. Pero @ es igual de válido.

PCRE también permite llaves coincidentes como (...) o <...> para la expresión regular.

+0

No hay caracteres ASCII, solo no son alnums, y la barra diagonal inversa tampoco es válida. –

+0

Un delimitador puede ser cualquier carácter no alfanumérico, que no sea de barra invertida ni de espacios en blanco. – Karolis

1

La respuesta breve es sí. El símbolo específico usado no es importante; generalmente debe ser algo que no aparece dentro del patrón. Por ejemplo, estos son todos equivalentes:

<?php 
    preg_replace("@(<\?[^>]*>)[email protected]", "", $content); 
    preg_replace("/(<\?[^>]*>)+/", "", $content); 
    preg_replace("!(<\?[^>]*>)+!", "", $content); 
?> 

La razón el símbolo es necesario es porque modificadores pueden añadirse después de la expresión. Por ejemplo, para buscar entre mayúsculas y minúsculas, puede utilizar:

<?php 
    preg_replace("@(<\?[^>]*>)[email protected]", "", $content); 
?>