web-dev-qa-db-fra.com

Comment faire correspondre les espaces, le retour chariot et le saut de ligne en utilisant l'expression régulière en PHP?

Je travaille avec une expression régulière en PHP. J'ai la chaîne suivante:

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

Cette chaîne contient des caractères de retour chariot et de saut de ligne.

Je veux que mon expression régulière remplace les balises html img par IMG mais cela ne fonctionne pas avec le texte ci-dessus.

J'ai découvert qu'il contenait ces caractères en parcourant chaque caractère de la chaîne et en imprimant la représentation hexadécimale qui peut être trouvée ici ( http://Pastebin.com/ViNdBsRV ).

Voici mon expression régulière:

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

Appréciez l'aide.

21
Mr B

Cette:

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

Personnellement, quand je fais une expression régulière, j'essaie toujours d'aller le plus court/le plus simple. Ici, vous souhaitez remplacer une balise entière, qui commence par '<img 'et se termine par' /> ',' .+? 'est une capture non gourmande (paresseuse). Et pour les modificateurs 'i' pour le cas et 's' à ​​. la possibilité d'être une nouvelle ligne.

Plus d'informations sur la cupidité vs la paresse: http://www.regular-expressions.info/repeat.html
Plus d'informations sur les modificateurs: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

9
3on

[\n\r]+ Correspondra aux nouvelles lignes. Pour les espaces blancs, ajoutez [\n\r\s]+

58
Merianos Nikos

Cela a fonctionné pour moi, il correspond à plusieurs espaces et multilignes, ainsi qu'à tout autre caractère ou symbole.

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

J'espère que cela aide n'importe qui.

Cela correspond par exemple:

stpd  : asdfasdf
this is also matching ***
4
G Jeny Ramirez