Предупреждение: preg_match() [function.preg-match]: неизвестный модификатор '('

У меня есть эти HTML-теги:

<div class="title">Copy me if you can</div>

поэтому я хочу использовать preg_match, чтобы взять просто «Скопируйте меня, если сможете». Я использую этот шаблон preg:

$preg = "<div class=\"title\">(.+?)</div>";

Поэтому я написал этот код

$match = preg_match($preg,$content);

Браузер выдает:

Warning: preg_match() [function.preg-match]: Unknown modifier '('

Что


person Adam    schedule 09.05.2011    source источник
comment
stackoverflow.com/questions/1531456/   -  person zloctb    schedule 27.10.2015


Ответы (5)


Вы забыли разделитель

$preg = '~<div class="title">(.+?)</div>~';

Первая буква в шаблоне всегда определяет используемый разделитель. В вашем случае это <, поэтому конечный разделитель - >. Все, что после этого, используется как специальный модификатор, изменяющий определенное поведение. ( не является допустимым модификатором. Вот что сообщение об ошибке хотело сказать вам :)

person KingCrunch    schedule 09.05.2011
comment
оно работает ! спасибо (:, но есть ли RegExp, который принимает только то, что находится между тегами? (Скопируйте меня, если можете), мой RegExp принимает весь тег:/ Я знаю, что могу использовать str_replace() для замены тегов только RegExp тот, кто может сделать работу лучше xD - person Adam; 10.05.2011

Попробуйте: $preg = '/<div class="title">([^<]+)</div>/';

person David Fells    schedule 09.05.2011

Лично, когда речь идет о HTML, я бы избегал разделителя де-факто / и вместо этого использовал #, чтобы вам не приходилось помнить об экранировании любых закрывающих тегов HTML.

$preg = '#<div class="title">([^<]+)</div>#';
person Nev Stokes    schedule 09.05.2011

Вам нужно добавить разделители в ваше регулярное выражение. Попробуй это:

$preg = "/<div class=\"title\">(.+?)<\/div>/";

/ — это разделители, которые отмечают начало и конец вашего регулярного выражения. Причина использования разделителей заключается в том, что вы можете добавлять флаги в свое регулярное выражение. Эти флаги вставляются после вашего регулярного выражения. Пример:

$preg = "/<div class=\"title\">(.+?)<\/div>/i";

Я добавил i в качестве модификатора, пометив поиск регулярных выражений как нечувствительный к регистру.

person alexn    schedule 09.05.2011
comment
Разве вам не нужно избегать / в вашем закрывающем div? Кроме того, чувствительность к регистру не является проблемой при сопоставлении точек. - person Nev Stokes; 09.05.2011
comment
@Nev Это был просто пример объяснения разделителей. - person alexn; 09.05.2011
comment
Понятно, но это не сработало бы, если бы кто-то действительно попробовал это. Без использования ‹\/div› вы просто запутаете тех, кто не знаком. - person Nev Stokes; 09.05.2011

У меня та же проблема, и мне интересно, могу ли я сделать то же самое, например: Предупреждение: preg_match() [function.preg-match]: Неизвестный модификатор 't' в /home/08/public/www/wp-content/plugins /woocommerce-gateway-dibs-form/gateway-dibs.php в строке 707

Это код: if ( preg_match($_SERVER["REQUEST_URI"], 'woocommerce/dibscancel') !== false) {

        header("HTTP/1.1 200 Ok");

        $callback = new WC_Gateway_Dibs;
        $callback->cancel_order(stripslashes_deep($_REQUEST));
        return;
    }
person Art    schedule 18.05.2013