За последние 24 часа нас посетили 17854 программиста и 1600 роботов. Сейчас ищут 840 программистов ...

Помогите регулярно выразиться

Тема в разделе "Регулярные выражения", создана пользователем kalamfur, 2 ноя 2009.

  1. kalamfur

    kalamfur Активный пользователь

    С нами с:
    20 окт 2009
    Сообщения:
    19
    Симпатии:
    0
    Задача такая. Есть массив слов (слово1, слово2...)

    Надо из текста

    • текст текст текст текст текст текст текст текст текст текст текст текст
      текст текст текст текст наше слово1 текст текст текст текст текст текст текст
      текст текст текст текст текст текст текст текст текст текст текст текст
      текст текст текст
      текст текст текст текст текст текст "слово2ое" текст текст текст текст текст текст
      текст текст текст текст текст текст текст текст текст текст текст
      текст текст еще слово2а текст текст текст текст текст текст текст текст
      текст текст текст текст текст текст текст текст текст текст текст
    ================================================
    выбрать выделенное.
    • наше слово1
      слово2ое
      еще слово2а
    ================================================


    Делаю так:

    PHP:
    1. $wc=array("[color=red]слово1[/color]", "[color=blue]слово2[/color]");
    2.  
    3. foreach ($wc as $w1) {
    4. [color=black]  $patterns = '/(^|\s|\W|\'|\")((\w{3,}\s+)?'.[color=red]$w1[/color].'\w*+)(\s|\W|\'|\")/is';[/color]
    5.   $replaser = "\$1<b>\$2</b>\$4";
    6.   $f = preg_replace($patterns, $replaser , $f);
    7. }
    8.  
    9. echo $f;
    На WAMP'е работает "на ура".
    На хосте - нет.

    Где накосячил?
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    скорее всего поможет установка русской локали вашей кодировки http://php.net/setlocale
     
  3. kalamfur

    kalamfur Активный пользователь

    С нами с:
    20 окт 2009
    Сообщения:
    19
    Симпатии:
    0
    А можно конкретно кодом?

    делаю так:
    PHP:
    1. echo setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');

    результат тот же (http://www.kalamfur.ru)
     
  4. kalamfur

    kalamfur Активный пользователь

    С нами с:
    20 окт 2009
    Сообщения:
    19
    Симпатии:
    0
    Спасибо, нашел!

    PHP:
    1. header('Content-Type: text/html; charset=windows-1251');
    2. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian');
     
  5. kalamfur

    kalamfur Активный пользователь

    С нами с:
    20 окт 2009
    Сообщения:
    19
    Симпатии:
    0
    ну вот.. надо было проверять лучше ((=
    Оказывается проблема осталась - регулярка странным образом режет слова.
    Результат её работы можно посмотреть на сайте - http://kalamfur.ru

    Подскажите, в чём проблема? Мистика. Нужна помощь.
     
  6. sk8r84

    sk8r84 Активный пользователь

    С нами с:
    16 ноя 2009
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Тольятти
    Здравствуйте, помогите пожалуйста разобрался с регулярными выражениями. Мне нужно выбрать все элементы соответствующие шаблону и записать их в массив для последующей работы с ними. Для этого я использую функцию ereg()
    Код (Text):
    1.  
    2. <?php
    3.  
    4. $file=file_get_contents('http://www.youtube.com/results?search_query=bicycle&search_type=&aq=f');
    5.  
    6. ereg('watch\?v\=...........', $file, $regs);
    7.  
    8. echo $regs[0], "&nbsp;", $regs[1];
    9.  
    10. ?>
    Функция находит первый элемент поиска записывает его в $regs[0], а остальные элементы массива остаются пустыми, несмотря на то что подобных элементов на страничке много. Мне кажется что-то не так с регулярным выражением, помогите разобраться пожалуйста :)