[help] Обработка строки несколькими регулярными выражениями

Тема в разделе "PHP", создана пользователем HatoL, 19 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    Пишу скрипт для обработки текста для последующего его вывода на печать (из текста удаляются все ссылки и т.п.). Мне надо использовать несколько различных регулярных выражений с различной заменой. Хочется написать функцию, которую можно будет использовать примерно так:
    PHP:
    regexp_replace(array(

    '/<a href=.*>/i' => ''

    ))
    Каким образом можно обратиться не к значениям самого массива, а к его названиям? Или как можно по-другому реализовать эту задачу (использование нескольких регов к одной строке) ?
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    1. банальный forech с выбором ключей.

    2. Получить ключи можно при помощи array_keys(), а далее их уже обрабатывать в цикле.
     
  3. General Fizz

    General Fizz Боевой Генерал :)

    Регистр.:
    11 апр 2007
    Сообщения:
    753
    Симпатии:
    396
    Перерабатывай логику программы с целью отказаться или сделать минимум регулярных выражений, ибо большое их количество это неоправданные тормоза. Многие регулярки можно заменить строковыми функциями.

    Теги убить можно функцией striptags или если считывать по строкам - fgetss.
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    strip_tags и fgetss убьют все тэги, а поскольку текст готовится для печати, это не совсем разумно.
    По поводу регэкспов полностью солидарен.
     
  5. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Ммм, preg_replace поддерживает в качестве агрументов массивы вообщем-то.
    Просто надо сделать два массива - один с поиском, а другой с заменой.
     
  6. Excavator

    Excavator Писатель

    Регистр.:
    8 авг 2007
    Сообщения:
    6
    Симпатии:
    0
    Передавай в preg_replace 2 массива:

    (http://php.net/preg_replace)
     
  7. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    С учетом последних двух постов, написал для себя функцию, которую хотел. Ничего в ней такого инновационного нет, но на всякий кому надо, вот:
    PHP:
    function preg_replaces ($subject$array)
    {
        
    $patterns array_keys ($array);
        
    $replacements array_values ($array);
        return 
    preg_replace ($patterns$replacements$subject);
    }
    Использование простое. В качестве $subject указываем строку, над которой производим операцию, в качестве $array - массив, ключами которого являются регулярные выражения, а соответствующие им значения - заменяющие строки.
     
Статус темы:
Закрыта.