2012-03-13 22 views
7

Quiero hacer coincidir palabras en camello que comiencen con ! como !RedHat contenidas en $line. Estoy usando php 5.3.10-1ubuntu2 with Suhosin-Patch (cli).Cómo hacer coincidir el signo de exclamación (!) En PHP?

estoy tratando siguientes cosas:

  • $line = preg_replace(" !([A-Z])", " $1", $line);
    • resultado: PHP Warning: preg_replace(): No ending delimiter '!' found
  • $line = preg_replace(" \!([A-Z])", " $1", $line);
    • resultado: PHP Warning: preg_replace(): Delimiter must not be alphanumeric or backslash
  • $line = preg_replace(" [!]([A-Z])", " $1", $line);
    • resultado: PHP Warning: preg_replace(): Unknown modifier '('
  • $line = preg_replace(" [\!]([A-Z])", " $1", $line);
    • resultado: PHP Warning: preg_replace(): Unknown modifier '('

¿Cómo es la forma correcta para que coincida con ! en PHP expresión regular?

Respuesta

6

Es necesario utilizar delimitadores en su expresión regular - no alfanumérico, como el mensaje de error indica:

$line = preg_replace("/ !([A-Z])/", " $1", $line); 

Aviso / los personajes al principio y al final de la cadena de expresiones regulares.

Estos no tienen que ser / - se puede utilizar # o incluso ! - pero si se utiliza ! entonces usted tendrá que escapar del carbón ! dentro de la propia expresión regular.

+0

no necesita escapar de '!' –

+0

@BartKiers Sí, lo sé, acabo de copiar una de sus opciones al azar, resultó ser la segunda. Actualicé la respuesta ahora. –

+0

@OP tenga en cuenta que para usar las funciones de expresiones regulares de php, debe encerrar la expresión con un delimitador "aleatorio" (elegido por el usuario). Esto puede ser/(como en el ejemplo), pero también &, * o lo que sea. Pero prácticamente cualquier ejemplo encontrado en Internet omite esos cierres (lo cual es correcto), así que no los olvides :) – giorgio

-1

Prueba esto:

!\b([A-Z][a-z]*){2,}\b 

vivo previsualización: http://regexr.com?30a95 (marque global y de varias líneas).

+1

la palabra límite en '!\ b [A-Z] 'simplemente se puede omitir: siempre hay un' \ b' entre '!' y una letra. El problema del OP son los delimitadores, que Aleks ya mencionó en su respuesta. –

Cuestiones relacionadas