Навигация:





















Для возврата к меню навигации используйте клавишу 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] |
Также обратите внимание на контекстное меню для вызова некоторых операторов
Обозначение символов переноса строк и экранирование служебных символов
Для обозначения переносов строк в функциях поиск-замены используется макрос {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] служит для включения реверсивного режима (обратного режима, поиск вхождений идет не от начала текста, а от его конца).

Оператор прекращения выполнения цепочки правил поиск-замены в случае, когда текст (по текущему состоянию) не пустой ({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 |
Смотрите синтаксис регулярных выражений.
1 | [FILTERSTRINGS][STEMPLATE]Строка: {STR}, сработавший ключ: {USEDKEY}[/STEMPLATE]1{fsep}2|keep |
Использование назначаемых переменных в функциях поиск-замены

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

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

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

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

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

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

1 | [ELEMENTS]<table>(*)</table>(*)</tr>(*)3(*)once(*)cutuncounted| |
Подстановка имени секции к каждому ее элементу ([SECTORNAME])

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}
Я правильно понял, что {get} – это просто синоним для {skip} (т.к. функционал вставки скипнутых данных есть у обоих)?
{get} имеет совсем другой смысл. Смотрите примеры его использования выше.
Но ведь эти два примера идентичны, или я что-то не понимаю?
{skip}|{skip}
— Заменит все теги title вместе с их содержимым на то, что стоит между и
{get}|{get}
— Выведет текст между тегами title
Здравствуйте.
Пожалуйста, задавайте вопросы на форуме http://forum.sbfactory.ru/ (ответ на вопрос системы NoSpam – иАОЕ)
Спасибо!
Извиняюсь, код порезался, вот 2 примера, о которых я говорю
{skip}|{skip}
— Заменит все теги title вместе с их содержимым на то, что стоит между и
{get}|{get}
— Выведет текст между тегами title
Даже с code не получается. В общем, в обоих примерах берется код между тегами title и заменяется на этот же код без тегов.
Добрый день. Есть такой alt=”CERSANIT, BINO SMALL FLOWER CREAM СТЕНА”
Мне нужно в повторяющихся границах взять только слово BINO
alt=”CERSANIT, – начало парсинга
“- конец парсинга
в шаблоне вывода поиск замены (пробел){skip}|
Но в таком случае выводит не только BINO, а все что после первого пробела скрывается, а вывводит BINO SMALL FLOWER CREAM.
Как правильно сделать?
Здравствуйте.
Пожалуйста, задавайте вопросы на форуме http://forum.sbfactory.ru/ (ответ на вопрос системы NoSpam – иАОЕ)
Спасибо!
Добрый день!
Попадаются при парсинге такие конструкции “#187-” и поиском-автозаменой никак не получается это побороть (удалить при парсинге на лету)?
Вот что я пробовал:
re:&.*-|
и вот так
#187-|
Не подскажите?
Здравствуйте.
Пожалуйста, создайте тему с вашим вопросом на форуме http://forum.sbfactory.ru/ (и прикрепите к сообщению ваш файл проекта (меню – файл – сохранить проект)).
Спасибо!
С уважением к вам, Сергей.
Вот так “»-” поподаются, сорри!
Какая разница между этими двумя записями?
{skip}|{skip}
— Заменит все теги title вместе с их содержимым на то, что стоит между и
{get}|{get}
— Выведет текст между тегами title
Добрый день! А можно ли сделать несколько замен в одном макросе? У вас в примерах показано только одна замена,а мне надо сделать несколько замен. То есть я выбрасываю все теги используя:
[REPLACE(|)][VALUE][/REPLACE]
и далее мне надо еще заменить\очистить несколько слов. Как это можно сделать?
Здравствуйте.
Обратите внимание на примечание: В макросах REPLACE правила поиск-замены могут отделяться друг от друга не только символом переноса строки, но и специальным оператором {break}.
С уважением к вам, Сергей.
с данной проблемой зашел на форум и все увидел, как это делается, вот пример:
[REPLACE(|{break}Research Email|)][VALUE][/REPLACE]
Спасибо!
Пожалуйста! Обращайтесь…
Добрый день подскажите как удалить все что находиться в скобке , Пример: 110 (1 шт. 199 руб.),116,122 (1 шт. 199 руб.),128 (1 шт. 199 руб.) , необходимо чтобы было так: 110,116,122,128
Здравствуйте.
({skip})|
С уважением к вам, Сергей.
Спасибо!!
Забыл добавить что в скобках , разный текст на всех товарах..
Добрый день, столкнулся еще с одной проблемой)) задаю граници парсинга :Цветкакао с молокомтемно синийчерный уделяем лишнии теги. На выходе получаем : какао с молокомтемно синийчерный , все слитно! как разделить это или хотябы через “,” .
Здравствуйте.
Пожалуйста, создайте тему на форуме с соответствующим примером кода (там код будет видно).
С уважением к вам, Сергей.
Здравствуйте.
Подскажите как удалить все знаки вопроса “?”.
Здравствуйте.
?|
Доброго времени суток, подскажите пожалуйста, как удалить символ | ?
Здравствуйте.
{sep}|
С уважением к вам, Сергей.
Оперативно, огромное спасибо, Сергей:)
апельсин|фрукт:
апельсин маленький|почти мандарин.
Как вместо(фрукт: маленький) получить (почти мандарин.)?
Здравствуйте.
Поменять местами правила поиск-замены:
апельсин маленький|почти мандарин.
апельсин|фрукт:
С уважением к вам, Сергей.
Как из текста убрать скобки (…) ?
Конструкции:
(|
)|
не работают
для закрывающей есть {parenthesis}
Для открывающей нет
Подскажите плиз
Здравствуйте.
Данные конструкции работают.
Если у вас проблемы с этим, можете опубликовать у нас на форуме ваш файл проекта (файл настроек) и мы посмотрим, в чем дело.
С уважением к вам, Сергей.
Добрый день!
Как можно заменить “пустое” значение на определенное значение?
Т.е. в данной границе парсинга в большинстве есть начения, но иногда они пустые, мне нужно заменить все пустые поля на значение “commercial”.
|commercial – не подходит.
Отобой вопроса, нашел nilltext