Функции поиск-замены

Функции поиск-замены используются во многих модулях программы.

При парсинге контента функции поиск-замены можно вызывать следующими методами:

1.) На панели инструментов главного окна программы есть кнопка «дополнительные настройки границ парсинга» (ctrl+4) (в каждой вкладке внизу есть отдельная функция поиск-замены, применяемая для каждой из обычных границ парсинга);

2.) В редакторе шаблона вывода (кнопка на панели инструментов «редактировать шаблон вывода» или ctrl+2) можно прописывать макросы поиск-замены (FIRST_REPLACE, BEFORE_IMG_REPLACE, REPLACE), которые отличаются только порядком выполнения:

1
2
3
[FIRST_REPLACE(что заменить|на что заменить)]текст[/FIRST_REPLACE] - выполнится практически перед всеми другими макросами шаблона вывода
[BEFORE_IMG_REPLACE(что заменить|на что заменить)]текст[/BEFORE_IMG_REPLACE] - выполнится перед функциями загрузки изображений
[REPLACE(что заменить|на что заменить)]текст[/REPLACE] - выполнится практически после всех других макросов шаблона вывода

Также макросы можно добавлять и в настройку повторяющихся границ парсинга (ctrl+5 или shift+ctrl+5):

1
2
3
[FIRST_REPLACE(что заменить|на что заменить)][VALUE][/FIRST_REPLACE] - выполнится практически перед всеми другими макросами шаблона вывода
[BEFORE_IMG_REPLACE(что заменить|на что заменить)][VALUE][/BEFORE_IMG_REPLACE] - выполнится перед функциями загрузки изображений
[REPLACE(что заменить|на что заменить)][VALUE][/REPLACE] - выполнится практически после всех других макросов шаблона вывода

Где [VALUE] выводит текст каждого цикла повторяющейся границы парсинга.


Все функции поиск-замены имеют одинаковый синтаксис. Для реализации замены текста нужно прописать правила (что заменить|на что заменить). Каждое правило поиск-замены прописывается с новой строки (поэтому вы можете делать сразу несколько поиск-замен в пределах одного макроса или функции).

Например, вам нужно заменить «апельсин» на «фрукт» и «мандарин» на «маленький фрукт», пропишем в окно поиск-замены следующие правила:

1
2
апельсин|фрукт
мандарин|маленький фрукт

Тогда текст «Вася съел апельсин и мандарин» преобразуется в «Вася съел фрукт и маленький фрукт».

Примечание: В макросах REPLACE правила поиск-замены могут отделяться друг от друга не только символом переноса строки, но и специальным оператором {break}.


Для включения режима регистро-чувствительности необходимо добавить оператор [CASE] в конец нужного(ых) правил(а) поиск-замены:

1
2
апельсин|фрукт[CASE]
мандарин|маленький фрукт[CASE]

По умолчанию функция поиск-замены применяется ко всем вхождениям. Если вам нужно заменить только одно вхождение в тексте, то добавьте оператор [ONCE] в конец нужного(ых) правил(а) поиск-замены:

1
2
апельсин|фрукт[CASE][ONCE]
мандарин|маленький фрукт[CASE]



Для обозначения переносов строк в функциях поиск-замены используется макрос {br}.

Если вы хотите заменить текст, который содержит в себе переносы строк, например:

1
2
3
<div>
<img src="123.jpg">
</div>

То пропишите для функции поиск-замены следующее правило:

1
<div>{br}<img src="123.jpg">{br}</div>|на что заменить

В итоге получим:

1
на что заменить

Для экранирования символа | в функциях поиск-замены используется макрос {sep}.
Для экранирования символа ) используется макрос {parenthesis}.



Иногда в функциях поиск-замены требуется использовать макрос {skip}. Для того, чтобы понять, как он работает, изучите следующие примеры:

1
<title>{skip}</title>|1233

— Заменит все теги title вместе с их содержимым на «1233»

1
<title>{skip}</title>|

— Удалит все теги title вместе с их содержимым

1
<title>{skip}</title>|{skip}

— Заменит все теги title вместе с их содержимым на то, что стоит между <title> и </title>

1
<a {skip}>|<noindex><a {skip}></noindex>

— возьмет все теги a в noindex

1
{skip}CDATA|привет

— Заменит все, что расположено от начала документа до «CDATA» на «привет»

1
CDATA{skip}|привет

— Заменит все, что расположено от конца документа до «CDATA» на «привет»

1
CDATA{skip}|

— Удалит все, что расположено от конца документа до «CDATA»



Иногда в функциях поиск-замены требуется использовать макрос {get}. Для того, чтобы понять, как он работает, изучите следующие примеры:

1
<title>{get}</title>|{get}

— Выведет текст между тегами title

1
<title>{get}</title>|{get}{get}

— Дважды выведет текст между тегами title

1
{get}|{get} {get}

— Дважды выведет весь текст и поставит между каждой частью символ пробела

1
CDATA{get}|{get}

— Выведет все, что расположено от конца документа до «CDATA»

1
{get}CDATA|{get}

— Выведет все, что расположено от начала документа до «CDATA»

1
alt="{skip}" title="{skip}"|alt="{skip(2)}" title="{skip(1)}"

— Поменяет местами значения alt и title



Если вы используете несколько правил поиск-замены и, например, в первом правиле вы использовали {skip} или {get}, то в следующем правиле (втором) вы можете выводить значения предыдущих {skip} или {get} макросами: {prevskip} и {prevget} (соответственно):

1
2
<a href="{get}"|{get}
{prevget}|"{prevget}"

Если при использовании {skip} заменяется множество вхождений или вы используете несколько операторов {skip} в одном правиле поиск-замены, то можно вызывать различные значения {prevskip}, обращаясь к ним по их порядковому индексу:

1
2
3
4
5
6
7
8
9
{prevskip(1)}, {prevskip(2)}, {prevskip(3)}...
 
Допустим, есть:
<img alt="ALT" title="TITLE">
 
Используем поиск-замену:
alt="{skip}" title="{skip}"|
 
То в следующем правиле поиск-замены: {prevskip(1)} = ALT, а {prevskip(2)} = TITLE



Парсинг вхождений, заключенных в одинаковые «границы» может осуществляться макросом {get} с использованием {multiget} после символа |:

1
[REPLACE("{get}"|{multiget})]"1","2","3"[/REPLACE]

Данная конструкция возьмет все вхождения, заключенные между символами: " и " и выведет их в результат в построчном виде:

1
2
3
1
2
3



Если вы используете несколько правил (строк) поиск-замены и вам нужно, чтобы сработало ТОЛЬКО ОДНО правило из обозначенной группы (после первого срабатывания одного из правил поиск-замены, остальные правила из этой группы проигнорируются), то поместите их в [ONERULE]…[/ONERULE]:

1
2
3
4
5
6
[ONERULE]
апельсин|фрукт
мальчик|мужчина
дерево|живое
[/ONERULE]
лезет|взбирается

При таком списке правил поиск-замены, мы должны из текста красивый мальчик лезет на дерево получить:

1
красивый мужчина взбирается на дерево

Если бы мы не использовали [ONERULE], то получили бы следующий результат:

1
красивый мужчина взбирается на живое

Во втором случае, сработало бы не одно правило (строка) поиск-замены из группы [ONERULE], а все.

Примечание: В вышеуказанном примере, на правило лезет|взбирается действие [ONERULE] не распространяется, так как это правило находится вне группы [ONERULE].



Для обозначения начала и конца текста используются операторы {textstart} и {textend} (соответственно).

Если у нас есть текст прекрасное дерево растет во дворе и мы применяем к нему правило поиск-замены красное|красноватое, то получим в результате прекрасноватое дерево растет во дворе. При применении следующего правила поиск-замены {textstart}красное|красноватое, часть слова красное (в слове прекрасное) заменена не будет (так как есть {textstart}, который служит для обозначения начала текста).

Аналогичным методом работает и {textend}, только служит для обозначения конца заменяемого текста.

Также возможно и одновременное использование операторов {textstart} и {textend}:

1
2
{textstart}отвертка бытовая{textend}|553
{textstart}отвертка бытовая (красная){textend}|557

Примечание: Использование операторов {textstart} или {textend} в каком-либо правиле поиск-замены исключает применение других операторов ({get}, {skip}, re:). Это ограничение распространяется только на то правило поиск-замены, в котором есть {textstart} или {textend}!



Оператор {reset_if_nil} используется для восстановления текста (где производим поиск-замену) к исходному состоянию (до применения к нему поиск-замен), в случае, если текст окажется пустым.

Оператор {reset_if_nil} указывается на отдельной строке:

1
2
3
<h1>{get}</h1>|{get}
{reset_if_nil}
<h2>{get}</h2>|{get}



Оператор [REV] служит для включения реверсивного режима (обратного режима, поиск вхождений идет не от начала текста, а от его конца).
Content Downloader

Content Downloader



Оператор {break_if_not_nil} используется для прекращения выполнения цепочки правил поиск-замены, в случае, если текст (где производим поиск-замену) будет не пустым.

Оператор {break_if_not_nil} указывается на отдельной строке:

1
2
3
<h1>{get}</h1>|{get}
{break_if_not_nil}
<h2>{get}</h2>|{get}



Автоматический поиск закрывающего HTML-тега

Данная функция используется в случаях, когда нужно удалить или спарсить из документа какой-либо HTML-тег вместе с его «внутренностями» (различные вложенные теги).

1
2
3
4
5
6
7
8
9
10
11
открывающий_тег_или_его_часть_(начало_поиска){AUTO}имя_тега|параметры ({AUTO},{GETMETHOD})
 
Параметр {AUTO} выводит код, который был найден функцией автоматического поиска закрывающего тега
Параметр {GETMETHOD} включает режим работы правила поиск-замены, аналогичный режиму работы оператора {get}
 
<div id="5"{AUTO}div|{AUTO}{GETMETHOD} (парсинг тега div id="5" вместе с его содержимым, вне зависимости от того, сколько вложенных тегов div он имеет)
<table{AUTO}table|{AUTO}{GETMETHOD} (парсинг тега table вместе с его содержимым, вне зависимости от того, сколько вложенных тегов он имеет)
<div id="5"{AUTO}div|Добавить к началу {AUTO} добавить к концу{GETMETHOD} (так можно добавлять к началу или к концу результата любой текст)
<div id="5"{AUTO}div|вставить строку перед div id="5"{br}{AUTO}{br}вставить строку после закрывающего тега (так можно добавить строки перед и после тега div id="5", {br} служит для вставки переноса строки в функциях поиск-замены)
<div id="5"{AUTO}div| (такое правило поиск-замены удалит тег div id="5", вне зависимости от того, сколько вложенных тегов он имеет внутри себя)
<div id="5"{AUTO}div|123 (замена тега div id="5" на 123)



Для включения регулярных выражений в функциях поиск-замены необходимо добавить параметр re: в начало нужных правил. Например:

1
2
3
ВАЗ|автоваз
В.*З|автоваз
re:В.*З|автоваз

Во второй строке регулярное выражение .* работать не будет, так как перед ней нет параметра re:.

Во второй строке будет искаться В.*З и заменяться на автоваз.

В третьей строке будут искаться все выражения с В в начале и с З на конце. Например: ВАЗ, ВОЗ, Волшебный таЗ.

Для более подробного ознакомления с работой регулярных выражений вы можете изучить этот материал.


Фильтрация строк по списку вхождений

Content Downloader

Content Downloader

Content Downloader

Content Downloader

Content Downloader

1
[FILTERSTRINGS][STEMPLATE]Строка: {STR}, сработавший ключ: {USEDKEY}[/STEMPLATE]1{fsep}2|keep


Использование назначаемых переменных в функциях поиск-замены

Content Downloader

Content Downloader


Установка значения результирующего текста

Content Downloader

Content Downloader


Как производить поиск-замену ТОЛЬКО внутри HTML-тегов (оператор {intag})

Content Downloader

Content Downloader


1 Star2 Stars3 Stars4 Stars5 Stars (оценок: 12, средний балл: 5,00)

Загрузка...
Автор: admin, 18 февраля 2012
Рубрики: Новости
32 комментария к сообщению: “Функции поиск-замены”
  1. Макс:

    Я правильно понял, что {get} — это просто синоним для {skip} (т.к. функционал вставки скипнутых данных есть у обоих)?

  2. Добрый день. Есть такой alt=»CERSANIT, BINO SMALL FLOWER CREAM СТЕНА»
    Мне нужно в повторяющихся границах взять только слово BINO
    alt=»CERSANIT, — начало парсинга
    «- конец парсинга
    в шаблоне вывода поиск замены (пробел){skip}|
    Но в таком случае выводит не только BINO, а все что после первого пробела скрывается, а вывводит BINO SMALL FLOWER CREAM.
    Как правильно сделать?

  3. Вадим:

    Добрый день!
    Попадаются при парсинге такие конструкции «#187-» и поиском-автозаменой никак не получается это побороть (удалить при парсинге на лету)?
    Вот что я пробовал:
    re:&.*-|
    и вот так
    #187-|
    Не подскажите?

  4. Вадим:

    Вот так «&#187-» поподаются, сорри!

  5. MAXiMAX:

    Какая разница между этими двумя записями?

    {skip}|{skip}
    — Заменит все теги title вместе с их содержимым на то, что стоит между и

    {get}|{get}
    — Выведет текст между тегами title

  6. Виталий:

    Добрый день! А можно ли сделать несколько замен в одном макросе? У вас в примерах показано только одна замена,а мне надо сделать несколько замен. То есть я выбрасываю все теги используя:
    [REPLACE(|)][VALUE][/REPLACE]
    и далее мне надо еще заменить\очистить несколько слов. Как это можно сделать?

    • admin:

      Здравствуйте.

      Обратите внимание на примечание: В макросах REPLACE правила поиск-замены могут отделяться друг от друга не только символом переноса строки, но и специальным оператором {break}.

      С уважением к вам, Сергей.

  7. Виталий:

    с данной проблемой зашел на форум и все увидел, как это делается, вот пример:
    [REPLACE(|{break}Research Email|)][VALUE][/REPLACE]

  8. Станислав:

    Добрый день подскажите как удалить все что находиться в скобке , Пример: 110 (1 шт. 199 руб.),116,122 (1 шт. 199 руб.),128 (1 шт. 199 руб.) , необходимо чтобы было так: 110,116,122,128

  9. Станислав:

    Забыл добавить что в скобках , разный текст на всех товарах..

  10. Станислав:

    Добрый день, столкнулся еще с одной проблемой)) задаю граници парсинга :Цветкакао с молокомтемно синийчерный уделяем лишнии теги. На выходе получаем : какао с молокомтемно синийчерный , все слитно! как разделить это или хотябы через «,» .

  11. Юрий:

    Здравствуйте.
    Подскажите как удалить все знаки вопроса «?».

  12. Денис:

    Доброго времени суток, подскажите пожалуйста, как удалить символ | ?

  13. Игорь:

    апельсин|фрукт:
    апельсин маленький|почти мандарин.
    Как вместо(фрукт: маленький) получить (почти мандарин.)?

  14. Как из текста убрать скобки (…) ?
    Конструкции:
    (|
    )|
    не работают
    для закрывающей есть {parenthesis}
    Для открывающей нет
    Подскажите плиз

    • admin:

      Здравствуйте.

      Данные конструкции работают.

      Если у вас проблемы с этим, можете опубликовать у нас на форуме ваш файл проекта (файл настроек) и мы посмотрим, в чем дело.

      С уважением к вам, Сергей.

Написать комментарий

Вы должны войти чтобы добавить комментарий.

Последние статьи

css.php