2011-09-23 10 views
16

Estoy trabajando con una expresión regular en PHP. Tengo la siguiente cadena:¿Cómo hacer coincidir el espacio en blanco, el retorno de carro y el avance de línea usando expresiones regulares en PHP?

<img 
src="/files/admin/hotel_website.gif" alt="Go To The Hotel's Web 
Site" align="absmiddle" border="0" class="hotel_icon" /> 

Esta cadena contiene caracteres de retorno de carro y avance de línea.

Quiero que mi expresión regular reemplace etiquetas html img con IMG, pero esto no funciona con el texto anterior.

Descubrí que contenía estos caracteres al recorrer cada carácter de la cadena e imprimir la representación hexadecimal que se puede encontrar aquí (http://pastebin.com/ViNdBsRV).

Aquí es mi expresión regular:

strip_tags(preg_replace('/^\s*<img\s*.*\/?>\s*$/i', '[IMG]', $test)); 

aprecio la ayuda.

+0

¿Me podría mostrar cadena Qué espera de la cuerda de arranque? –

Respuesta

5

Este:

preg_replace("#<img.+?/>#is", '[IMG]', $test) 

personalmente cuando estoy haciendo una expresión regular que siempre trato de ir el más corto/más simple. Aquí quiere reemplazar una etiqueta completa, que comienza con '<img' y termina con '/>', '.+?' es una captura no codiciosa (floja). Y para los modificadores 'i' para el caso y 's' a . la posibilidad de ser una nueva línea.

Más sobre greedyness vs pereza: http://www.regular-expressions.info/repeat.html
Más sobre modificadores: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

+0

Esto funciona como se esperaba, gracias por la explicación exhaustiva. Lo modifiqué ligeramente para que se ajuste a otros casos también:/ \ s * $/es – Sid

+0

@Sid No necesita agregar '\ s $' mi solución ya funciona para reemplazar '' en una página completa (así es como Probé la expresión regular). – 3on

+0

Agregué $ porque obtengo la cadena html de una tabla de base de datos. – Sid

43

[\n\r]+ Coincidirán las líneas nuevas. Los espacios en blanco para añadir [\n\r\s]+

+0

Agregué esto a mi expresión regular pero no funciona; '/^\ s * \ s * $/i' – Sid

+6

no incluye \ y \ n? –

+1

@ Col.Shapenel: sí – salathe

2

Esto funcionó para mí que coincide con varios espacios y líneas múltiples, también cualquier otro carácter o símbolo.

[\S+\n\r\s]+ 

Espero que esto ayude a alguien.

de que coincide por ejemplo:

stpd : asdfasdf 
this is also matching *** 
+4

Al poner un' + 'dentro' [] 'hace que coincida con un más literal.' \ S' es opuesto a '\ s', por lo que básicamente está haciendo coincidir cualquier carácter. '[\ s \ S] +' es la solución ya que '.' no * normalmente * coincide con caracteres de nueva línea. No hay mucho uso para este partido en sí. – bradlis7

Cuestiones relacionadas