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

Навигация:

Основные положения
Обозначение символов переноса строк и экранирование служебных символов
Оператор {skip} для обозначения динамичных (изменяющихся) подстрок (аналог регулярного выражения)
Оператор {get} для извлечения динамичной (изменяющейся) подстроки
Вывод данных {skip} и {get} от предыдущего правила поиск-замены с помощью операторов {prevskip} и {prevget}
Парсинг из текста всех значений, находящихся между одинаковыми границами с помощью оператора {multiget}
Операторы обозначения начала и конца текста в правилах поиск-замены ({textstart} и {textend})
Оператор восстановления исходного состояния текста в случае если он обнулился в процессе выполнения правил поиск-замены ({reset_if_nil})
Оператор включения реверсивного режима работы правила поиск-замены ([REV])
Оператор прекращения выполнения цепочки правил поиск-замены в случае, когда текст (по текущему состоянию) не пустой ({break_if_not_nil})
Автоматический поиск закрывающего HTML-тега (оператор {AUTO})
Использование общепринятых регулярных выражений в выбранных правилах поиск-замены (mod re)
Фильтрация строк по списку вхождений ([FILTERSTRINGS])
Использование назначаемых переменных в функциях поиск-замены
Как производить поиск-замену ТОЛЬКО внутри HTML-тегов (оператор {intag})
Как производить поиск-замену не затрагивая содержимое HTML-тегов (оператор {avoidhtmltags})
Оператор преобразования текста обычного формата CSV в служебный CSV-код программы ({INJECT_CSV})
Очистка строк от лишних символов ([PURGE])
Очистка указанного количества элементов из множества или парсинг указанного количества элементов из множества ([ELEMENTS])
Подстановка имени секции к каждому ее элементу ([SECTORNAME])
Типичные ошибки

Для возврата к меню навигации используйте клавишу home



Основные положения


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

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

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]

Также обратите внимание на контекстное меню для вызова некоторых операторов

Content Downloader




Обозначение символов переноса строк и экранирование служебных символов


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

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

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

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

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

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

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

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



Оператор {skip} для обозначения динамичных (изменяющихся) подстрок (аналог регулярного выражения)


Иногда в функциях поиск-замены требуется использовать макрос {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} для извлечения динамичной (изменяющейся) подстроки


Иногда в функциях поиск-замены требуется использовать макрос {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} от предыдущего правила поиск-замены с помощью операторов {prevskip} и {prevget}


Если вы используете несколько правил поиск-замены и, например, в первом правиле вы использовали {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



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


Парсинг вхождений, заключенных в одинаковые “границы” может осуществляться макросом {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} и {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} используется для восстановления текста (где производим поиск-замену) к исходному состоянию (до применения к нему поиск-замен), в случае, если текст окажется пустым.

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

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



Оператор включения реверсивного режима работы правила поиск-замены ([REV])


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

Content Downloader



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


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

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

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



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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
открывающий_тег_или_его_часть_(начало_поиска){AUTO}имя_тега|параметры ({AUTO},{GETMETHOD},{ALL})
 
Параметр {AUTO} выводит код, который был найден функцией автоматического поиска закрывающего тега
Параметр {GETMETHOD} включает режим работы правила поиск-замены, аналогичный режиму работы оператора {get}
Параметр {ALL} включает режим обработки всех вхождений
 
<div id="5"{AUTO}div| (такое правило поиск-замены удалит тег div id="5", вне зависимости от того, сколько вложенных тегов он имеет внутри себя)
 
<div id="5"{AUTO}div|123 (замена тега div id="5" на 123)
 
<div id="5"{AUTO}div|{AUTO}{GETMETHOD} (парсинг тега div id="5" вместе с его содержимым, вне зависимости от того, сколько вложенных тегов div он имеет)
 
<div id="5"{AUTO}div|{AUTO}{GETMETHOD}{ALL} (парсинг ВСЕХ тегов 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|123 {AUTO} (вставить перед тегом div id="5" текст 123)
 
<div id="5"{AUTO}div|123 {AUTO}{ALL} (вставить перед каждым тегом div id="5" текст 123)



Использование общепринятых регулярных выражений в выбранных правилах поиск-замены (mod re)


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

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

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

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

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

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



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

Примечание: Во вхождениях можно использовать регулярные выражения (добавьте re: в начало нужного вхождения)

1
[FILTERSTRINGS]re:s/\d{7}/\Z|keep

Смотрите синтаксис регулярных выражений.

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




Как производить поиск-замену не затрагивая содержимое HTML-тегов (оператор {avoidhtmltags})


Content Downloader




Оператор преобразования текста обычного формата CSV в служебный CSV-код программы ({INJECT_CSV})


Content Downloader




Очистка строк от лишних символов ([PURGE])


Content Downloader

1
2
3
4
5
[PURGE]|[LETTERS][NUMBERS] (оставить в тексте английские буквы, русские буквы и цифры)
[PURGE]|[LETTERS] [NUMBERS] (оставить в тексте английские буквы, русские буквы, пробелы и цифры)
[PURGE]|[LETTERS] {br}[NUMBERS] (оставить в тексте английские буквы, русские буквы, пробелы, символы переносов строк и цифры)
[PURGE]|[ENGLETTERS][NUMBERS] (оставить в тексте английские буквы и цифры)
[PURGE]|[RUSLETTERS][NUMBERS] (оставить в тексте русские буквы и цифры)





Очистка указанного количества элементов из множества или парсинг указанного количества элементов из множества ([ELEMENTS])


Content Downloader

Content Downloader

1
[ELEMENTS]<table>(*)</table>(*)</tr>(*)3(*)once(*)cutuncounted|







Подстановка имени секции к каждому ее элементу ([SECTORNAME])


Content Downloader

1
<div class="имя товара">[SECTORNAME]</div>[INSERTTO]<div>[INSERTTEMPLATE]<name>{SECTORNAME}</name>
1
2
3
4
5
6
7
8
<div class="имя товара"><div class="имя товара">Товар 1</div>
<div>Имя характеристики 1: значение характеристики</div>
<div>Имя характеристики 2: значение характеристики</div>
<div>Имя характеристики 3: значение характеристики</div>
<div class="имя товара">Товар 2</div>
<div>Имя характеристики 1: значение характеристики</div>
<div>Имя характеристики 2: значение характеристики</div>
<div>Имя характеристики 3: значение характеристики</div>





Типичные ошибки

Ошибки использования {skip} и {get}




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

Loading...
Автор: admin, 18 February 2012
Рубрики: Новости
Есть 34 коммент. к сообщению: “Функции поиск-замены”
  1. Макс says:

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

    • admin says:

      {get} имеет совсем другой смысл. Смотрите примеры его использования выше.

      • Макс says:

        Но ведь эти два примера идентичны, или я что-то не понимаю?

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

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

      • Макс says:

        Извиняюсь, код порезался, вот 2 примера, о которых я говорю


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

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

        • Макс says:

          Даже с code не получается. В общем, в обоих примерах берется код между тегами title и заменяется на этот же код без тегов.

  2. Андрей says:

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

  3. Вадим says:

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

    • admin says:

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

      Пожалуйста, создайте тему с вашим вопросом на форуме http://forum.sbfactory.ru/ (и прикрепите к сообщению ваш файл проекта (меню – файл – сохранить проект)).

      Спасибо!

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

  4. Вадим says:

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

  5. MAXiMAX says:

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

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

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

  6. Виталий says:

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

    • admin says:

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

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

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

  7. Виталий says:

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

  8. Виталий says:

    Спасибо!

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

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

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

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

  11. Станислав says:

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

    • admin says:

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

      Пожалуйста, создайте тему на форуме с соответствующим примером кода (там код будет видно).

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

  12. Юрий says:

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

  13. Денис says:

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

  14. Игорь says:

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

    • admin says:

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

      Поменять местами правила поиск-замены:
      апельсин маленький|почти мандарин.
      апельсин|фрукт:

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

  15. Андрей says:

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

    • admin says:

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

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

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

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

  16. Антон says:

    Добрый день!
    Как можно заменить “пустое” значение на определенное значение?
    Т.е. в данной границе парсинга в большинстве есть начения, но иногда они пустые, мне нужно заменить все пустые поля на значение “commercial”.
    |commercial – не подходит.

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

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

css.php