На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR
  
    > Как поймать кириллицу RegExp'ом?
      Что написать вместо <cyrcodes>?

      preg_match( "[<cyrcodes>]", $string );
      Сообщение отредактировано: rvt -
        может быть "[а-яА-Я]"?
        или попробывть "[[:alpha:]]" - только надо, чтобы были правильно установлены национальные установки...

        ...сам не знаю как их конкретно установить, но в книжке написано:
        Цитата
        "[[:alpha:]]" - соответствует любым строкам, содержащим знаки алфавита, отвечающего национальным установкам
        Сообщение отредактировано: shipbrother -
          Цитата rvt,3.09.04, 14:17
          Что написать вместо <cyrcodes>?
          вот пример:

          ExpandedWrap disabled
             
            preg_match( "[<cyrcodes>]", $string );</div></div>
            function replace_images_urls($scr, $urls)
              {
               preg_match_all("/<IMG[\040-\075\077-\377]*>/i", $scr, $ar);
               $vv = array();
               $flag = 0;
               foreach($ar[0] as $v)
               {
                $s = preg_replace("/(.*src=\")(.*)(\")(.*)/i", "\\2", $v);
                $s1 = str_replace("file:///","",$s);
                $s1 = str_replace("/","\\",$s1);
                $s1 = preg_replace("/%([0-9A-F]{2})/ie", "chr(hexdec('\\1'))", $s1);
                if (preg_match("/^\w:/i", $s1) || preg_match("/^\\\\\\\\/i", $s1))
                {
                  $s2 = substr(strrchr($s1, "\\"),1);
                  if (!$s2) $s2 = $s1;
                  $s1 = $s2;
                  $flag = 1;
                  foreach($urls as $v)
                  {
                    if (!strcasecmp($v['original'], $s1))
                    {
                      $scr = str_replace($s, $v['url'], $scr);
                      $flag = 0;
                    }
                  }
                }  
               }
               if ($flag) return array();
               return $scr;
              }
          Сообщение отредактировано: zer -
            я знаю еще 2 варианта поиска кирилицы
            один из них заключается в использовании встроеной linux-функции grep:
            ExpandedWrap disabled
              exec("echo("какая-нибудь фраза") | grep 'pattern'"", $output)
            но в этом случае должна быть правильно настроена локаль в системе

            второй способ: использование Perl-совместимых RegExp и метода setlocale()
            ExpandedWrap disabled
              setlocale(LC_ALL, 'ru_RU.CP1251');
              $result = preg_match('/\w+/', "слово на русском");
            $result в этом случае будет равен true(без setlocale() он был бы равен false, так как русские буквы в английском алфавите не считаются символами слов)
              Цитата
              zer, 4.09.04, 17:43
              preg_match_all("/<IMG[\040-\075\077-\377]*>/i", $scr, $ar);


              Т.е. имелось ввиду, что \040-\075\077-\377, это коды русских символов?
                Коды я нашел методом
                ExpandedWrap disabled
                  for ( $i = 0; $i < 256; $i++ ) {
                      echo chr($i)." | ".$i."<br>";
                  }


                :D

                А может это не сработать где-нибудь, из-за другой кодировки в PHP? И вообще как её можно поменять в PHP? Перекомпиляцией?
                  а чем не подходит setlocale()?
                    НеНасколько я понял у setlocale разные наборы значений параметров в зависимости от ОС. У меня Win, на хостинге FreeBSD... <_<
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0289 ]   [ 15 queries used ]   [ Generated: 27.04.24, 05:58 GMT ]