Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: preg_match() [function.preg-match]: Unknown modifier '.' in
 
 автор: lElectroHardl   (18.02.2012 в 20:45)   письмо автору
 
 

echo preg_match("/^[A-Za-zА-Яа-яЁё0-9 !\"№;%:?*()_/~@#$%^&*+|}><{`-=\]'/.,;[]+$/", "Прост отекст");

Выдает:
Warning: preg_match() [function.preg-match]: Unknown modifier '.' in
Но ведь это не модификатор, а часть выборки символов! Что я упускаю? (скрипт проверяем на наличие всех доступных символов)

  Ответить  
 
 автор: cheops   (18.02.2012 в 20:47)   письмо автору
 
   для: lElectroHardl   (18.02.2012 в 20:45)
 

Хм... ну как минимум / и [ нужно экранировать, а лучше вообще все содержимое прогнать через preg_quote().

  Ответить  
 
 автор: lElectroHardl   (18.02.2012 в 21:08)   письмо автору
 
   для: cheops   (18.02.2012 в 20:47)
 

Какая-то фигня получается
preg_match("/^[A-Za-zА-Яа-яЁё0-9 \!\"№;%\:\?\*\(\)_\/~@#\$%\^&\*\+\|\}\>\<\{`\-\=\\\]'\.,;\[]+$/", "Строка");// убрал то, что выделенно - работает

Не работает (говорит, что в строке нет таких символов (0)

  Ответить  
 
 автор: cheops   (18.02.2012 в 21:12)   письмо автору
 
   для: lElectroHardl   (18.02.2012 в 21:08)
 

Лучше все-таки задействовать preg_quote().

  Ответить  
 
 автор: lElectroHardl   (18.02.2012 в 21:15)   письмо автору
 
   для: cheops   (18.02.2012 в 21:12)
 

Я задействовал. Она выдала такой вот результат.

  Ответить  
 
 автор: Sfinks   (18.02.2012 в 22:55)   письмо автору
 
   для: lElectroHardl   (18.02.2012 в 21:08)
 

А у вас не utf-8?

  Ответить  
 
 автор: lElectroHardl   (18.02.2012 в 22:59)   письмо автору
 
   для: Sfinks   (18.02.2012 в 22:55)
 

Нет. У меня крякозябры. Вот их и нужно из строки отфильтровать.

  Ответить  
 
 автор: Sfinks   (18.02.2012 в 23:13)   письмо автору
 
   для: lElectroHardl   (18.02.2012 в 21:08)
 

У вас символы дублировались в [ ]. Вот так работает:
preg_match( "#^[а-яё\w\d\s\.\+\*\?\[\]\>\<\{\}\(\)\$\=\!\|\:\-\^\"\#\\№%/~@&`',;]+$#iu", "Строка" );
Если не utf-8, уберите "u" в конце.

  Ответить  
 
 автор: Sfinks   (18.02.2012 в 23:22)   письмо автору
 
   для: lElectroHardl   (18.02.2012 в 21:08)
 

Можно еще вот так сократить:
preg_match( "#^[а-яё,;№%/~@&`'\"\w\s\Q.+*?[]><{}()$=!|:-^\#\E]+$#i" , "С\"т-ро$к%а" );

  Ответить  
 
 автор: lElectroHardl   (19.02.2012 в 00:06)   письмо автору
 
   для: Sfinks   (18.02.2012 в 23:22)
 

Не работает.
Не работает.

Результат: 0;

  Ответить  
 
 автор: Sfinks   (19.02.2012 в 09:56)   письмо автору
 
   для: lElectroHardl   (19.02.2012 в 00:06)
 

У меня оба варианта работают. РВ оба правильные. Значит у вас с локалью проблемы.
Проверьте не на "строка", а на "stroka". Если сработает, значит:
1 - убедитесь еще раз в кодировке
2 - измените в начале а-яё обратно на а-яёА-ЯЁ и на конце i уберите.

  Ответить  
 
 автор: lElectroHardl   (19.02.2012 в 12:23)   письмо автору
 
   для: Sfinks   (19.02.2012 в 09:56)
 

Поковыряем.
Я другой вариант нашел как проверить, есть ли кракозябры в строке.
Смотрим, какой результат выдаст нам
<? 
mb_convert_encoding
("Stroka",'CP1251','UTF-8, KOI8-R');
mb_convert_encoding("ГЂ ГЇГ® ГІГҐГ¬Г­Г»Г¬ ГіГ«ГЁГ¶Г   строка    Г¬ ГЈГіГ«ГїГҐГІ Г¤Г®Г¦Г¤",'CP1251','UTF-8, KOI8-R');
mb_convert_encoding("Строка ",'CP1251','UTF-8, KOI8-R');

Запоминаем результаты. И радуемся :)
Правда пока точно не знаю, 100%-й ли результат будет...

  Ответить  
 
 автор: hitball   (17.10.2013 в 02:21)   письмо автору
 
   для: lElectroHardl   (19.02.2012 в 12:23)
 

добрый день! появилась ошибка
Warning: preg_match() [function.preg-match]: Unknown modifier 'd' in line

на линии
if (preg_match('/.*?'.$img.'\.(png|jpg|jpeg|gif)/is',$image['image'])) {

подскажите, пожалуйста, как исправить

весь кусок кода
function magiczoomplus_callback ($matches) {

    if (preg_match("/data\/Stick_Gallery/ims",$matches[0])) return $matches[0];//Product Label module support

    $plugin = $GLOBALS["magictoolbox"]["magiczoomplus"];
    $plugin_enabled = true;
    $result = $matches[0];
    if(!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*thickbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) && 
       !preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*fancybox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
       !preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*lightbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
       //!preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*cloud\-zoom(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
       !preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*cloud\-zoom.*?(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
       !preg_match("/class\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*colorbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
       !preg_match("/rel\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*colorbox(?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0]) &&
       !preg_match("/rel\s*=\s*[\'\"]\s*(?:[^\"\'\s]*\s)*prettyPhoto\[gallery\](?:\s[^\"\'\s]*)*\s*[\'\"]/iUs",$matches[0])) {
        $plugin_enabled = false;
    }
    if ($plugin_enabled) {
        $shop_dir = str_replace('system/','',DIR_SYSTEM);
        $image_dir = str_replace ($shop_dir,'',DIR_IMAGE);

        $title = $GLOBALS['magictoolbox']['prods_info']['name'];
        $title = htmlspecialchars(htmlspecialchars_decode($title, ENT_QUOTES));
        $description = $GLOBALS['magictoolbox']['prods_info']['description'];
        $description = htmlspecialchars(htmlspecialchars_decode($description, ENT_QUOTES));

        $img = preg_replace("/^.*?href\s*=\s*[\"\'].*\/(.*?)-\d+x\d+.*[\"\'].*$/is","$1",$matches[1]);
        $img = preg_replace('/([\(\)\-\+])/is','\\\$1',$img); // REALLY, all escaped now =)

        $original_image = false;
        if (isset($GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'])) {
            foreach ($GLOBALS['magictoolbox']['prods_info']['images'] as $image) {
            if (preg_match('/.*?'.$img.'\.(png|jpg|jpeg|gif)/is',$image['image'])) {
                $original_image = $image['image'];
            }
            }
        } else {
            $original_image = $GLOBALS['magictoolbox']['prods_info']['image'];
        }
        if (!$original_image) return $matches[0];

        $id = $GLOBALS['magictoolbox']['prods_info']['product_id'];

        $original_image = $image_dir.$original_image;
        $img = getThumb($original_image,'original',$id);
        $selector = getThumb($original_image,'selector',$id);
        $medium = getThumb($original_image,null,$id);
        $thumb = $selector;

        if ($plugin->type == 'standard') {

            if (!isset($GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'])) {
                $additional_result = $plugin->subTemplate(compact('title','img','medium','thumb','id'));
                $GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'] = '';// $additional_result;

                $thumb = getThumb($original_image,null,$id);
                $result = $plugin->template(compact('img','thumb','id','title','description'));

                $GLOBALS['magictoolbox']['MagicZoomPlus']['selectors'][] = $additional_result;
                $GLOBALS['magictoolbox']['MagicZoomPlus']['main'] = $result;

                return 'MAGICTOOLBOX_PLACEHOLDER';

            } else {
                $result = $plugin->subTemplate(compact('title','img','medium','thumb','id'));

                $GLOBALS['magictoolbox']['MagicZoomPlus']['selectors'][] = $result;
                return '';
            }
        } else if ($plugin->type == 'circle') {
            if (!isset ($GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'])) {
                $result = 'magiczoomplus_MAIN_IMAGE';
                $GLOBALS['magictoolbox'][strtoupper('magiczoomplus').'_MAIN_IMAGE_AFFECTED'] = $matches[0];
            } else {
                $result = $matches[0];
            }
            $GLOBALS['magictoolbox']['items'][] = array('medium' => $medium, 'img' => $thumb);
        }
    }
return $result;

  Ответить  
 
 автор: Sfinks   (17.10.2013 в 09:03)   письмо автору
 
   для: hitball   (17.10.2013 в 02:21)
 

На первый взгляд в этой строке нет ошибок.
Скорее всего, что-то есть в переменной $img. Скорее всего там есть слеши, а слеш у вас - ограничитель РВ.
Если так, то поможет preg_quote()
if (preg_match('/.*?'.preg_quote($img).'\.(png|jpg|jpeg|gif)/is',$image['image'])) {


P.S. лучше в таких случаях заводить новую тему, а не возрождать старую 2ух летней давности.

  Ответить  
 
 автор: hitball   (17.10.2013 в 12:39)   письмо автору
 
   для: Sfinks   (17.10.2013 в 09:03)
 

к моему огромному сожалению, не помогло
p.s. тему нашла через поисковик, по-этому и решила здесь разместиться

  Ответить  
 
 автор: Sfinks   (17.10.2013 в 13:28)   письмо автору
 
   для: hitball   (17.10.2013 в 12:39)
 

Выведите перед этой строкой:
echo '<pre>/.*?'.preg_quote($img).'\.(png|jpg|jpeg|gif)/is</pre>';

Что получается?

  Ответить  
 
 автор: hitball   (17.10.2013 в 13:38)   письмо автору
 
   для: Sfinks   (17.10.2013 в 13:28)
 

/.*? href\="image/data/activity/chemodan/Trunki\\\-Harley\\\-back\.jpg" title\="Чемодан\\\-каталка Р‘ожья РљРѕСЂРѕРІРєР° Trunki Harley \\\(Транки РҐР°СЂР»Рё\\\)" class\="colorbox" rel\="colorbox"\.(png|jpg|jpeg|gif)/is
Warning: preg_match() [function.preg-match]: Unknown modifier 'd' in Z:\home\11\www\admin\controller\module\magictoolbox\module.php on line 549

на странице ведь не только ошибка выдается, но еще и кодировка летит. при чем когда страницу обновляю, то все становится нормально: и кодировка и ошибка исчезает

  Ответить  
 
 автор: Sfinks   (18.10.2013 в 08:10)   письмо автору
 
   для: hitball   (17.10.2013 в 13:38)
 

Хм.... Это правда тот шаблон, который вы ожидали увидеть? Что-то я плохо представляю что им можно проверить..... Ну да ладно. Это отдельная беда. Сейчас о варнинге...

Вы же видите, что слеши не экранированы. Т.е. шаблон у вас кончается вот тут:
/.*? href\="image/d
а я вам давал ссилку на описание функции preg_quote()...
Если его почитать, то можно легко разобраться в чем дело. А именно:

> Функция preg_quote() принимает строку str и добавляет обратный слэш перед каждым служебным символом.
> В регулярных выражениях служебными считаются следующие символы:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

как видите, слеша среди них нет. Но нам надо его также экранировать..... Читаем дальше:

> Функция: string preg_quote ( string $str [, string $delimiter = NULL ] )
> Описание аргументов:
> str: Входная строка.
> delimiter: В случае если указан необязательный параметр delimiter, он будет также экранироваться.


Догадались или нет?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования