Как сопоставить пробелы, возврат каретки и строку с использованием регулярного выражения в PHP?

Я работаю с регулярным выражением в PHP. У меня есть следующая строка:

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

Эта строка содержит символы возврата каретки и строки.

Я хочу, чтобы мое регулярное выражение заменяло теги html img IMG, но это не работает с указанным выше текстом.

Я обнаружил, что он содержал эти символы, перебирая каждый символ в строке и распечатывая шестнадцатеричное представление, которое можно найти здесь (http://pastebin.com/ViNdBsRV).

Вот мое регулярное выражение:

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

Оцените справку.

Ответы

Ответ 1

Это:

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

Лично, когда я делаю регулярное выражение, я всегда стараюсь сделать кратчайший/самый простой. Здесь вы хотите заменить весь тег, который начинается с "<img" и заканчивается на "/>", ".+?" - это не жадный (ленивый) улов. А для модификаторов "i" для случая и "s" - . возможность быть новыми строками.

Подробнее о жадности и ленивости: http://www.regular-expressions.info/repeat.html
Подробнее о модификаторах: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

Ответ 2

[\n\r]+ Будет соответствовать новым строкам. Для белых пространств добавьте [\n\r\s]+

Ответ 3

Это сработало для меня, оно соответствует нескольким пробелам и многострокам, а также любому другому символу или символу.

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

Надеюсь, это поможет кому угодно.

Он соответствует, например:

stpd  : asdfasdf
this is also matching ***