Обрезка большого текста через Regex сильно нагружает процессор. Можно ли как-то уменьшить?

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
138
Реакции
29
Баллы
28
Всем здравствуйте!
Постараюсь описать подробно проблему.
Есть сайт. В нём 1.000.000 строк кода.
Мне нужно с него получать в многопотоке всё, что начинается от начала заголовков и заканчивая закрывающимся тегом </head>
Логично сделать через конструктор регулярных выражений и просто парсить, как я и сделал. Но, это очень сильно нагружает процессор сервера (VPS 8 ядер 2.4Ггц) даже при 10 потоках: http://prntscr.com/ltqqax
Шаблон прикрепил в аттаче.
Я, если честно, не знаю как работают регулярные выражения, но как мне кажется, что ищут они по всему тексту. Можно ли как-то ограничить их поиск, чтобы когда нашёлся текст - больше не искалось.
Ну или может есть какое-то более здравое решение чтобы это всё ускорить?
 

Вложения

можно так, без заголовков будет

0576eeb8e6.jpg
 
можно так, без заголовков будет

0576eeb8e6.jpg
Заголовки тоже нужны. Хотя там их и от силы даже меньше 1% от всего текста наберётся, на скорость это вообще не повлияет
Т.е. нужны все заголовки и то что в <head>...</head>
 
ну или так попробуй...

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

Вложения

  • Спасибо
Реакции: Ssmodey
ну или так попробуй...

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

А на удивление пободрее пошло:
http://prntscr.com/ltr34g

А можно ли как-то ну очень резво вырезать первые, допустим 100 строк?
(Вы мне советовали это в одном из топиков, но решения быстрого я так и не нашёл)
 
можно это сделать с помощью кубиков, положить в список, разделяя по строкам, а потом брать первые 100, можно попробовать
но лучше сниппетом, у меня такого к сожалению нет.
 
можно это сделать с помощью кубиков, положить в список, разделяя по строкам, а потом брать первые 100, можно попробовать
но лучше сниппетом, у меня такого к сожалению нет.
А разве можно через кубик получить определённое количество строк? http://prntscr.com/ltr9l3
Можно конечно же зациклить на взятие с 1 по 100 строку по порядку, не мне кажется, что это ещё больше утяжелит шаблон
 
Есть сайт. В нём 1.000.000 строк кода.
Учи xPath, он проще regex. Например, по id браузер находит мгновенно (хотя, в заголовке его обычно не используют).
На крайняк, есть стандартный поиск по атрибутам.
Вообще, парсить страницу регулярками, это бред и гемор. Страница может измениться от смены версии браузера или даже UA.
 
Последнее редактирование:
  • Спасибо
Реакции: Ssmodey
Учи xPath, он проще regex. Например, по id браузер находит мгновенно (хотя, в заголовке его обычно не используют).
На крайняк, есть стандартный поиск по атрибутам.
Вообще, парсить страницу регулярками, это бред и гемор. Страница может измениться от смены версии браузера или даже UA.
xPath пока не разбирал, но, а есть ли смысл, если шаблон на post/get?
Страница не изменится, ибо теги head и body, на сколько я знаю, везде есть. И мне нужно вырезать именно всё, что до закрывающегося тега head
 
Есть, но тут потребуется C# и подключение сторонних либ для разбора html.
Как-то всё очень сложно получается, оказывается :-) (да, я не разбираюсь ни в C#, ни вообще в кодинге). Но, неужели нельзя как-то по простому взять да вырезать из переменной очень быстро первые 100 строк кода да закинуть их в ту же переменную?
(я правда писал всё до закрывающегося тега head, но и такой вариант подойдёт)
 
Вообще при регулярках, я сначала вырезал необходимые куски, а уже по ним делал поиск.
т.е. сначало получить всё что до первого </head> (его если возможно ещё разделить) и уже делать поиск.

Но желательно ещё прогуглить статьи про оптимизацию регулярок.
 
Вообще при регулярках, я сначала вырезал необходимые куски, а уже по ним делал поиск.
т.е. сначало получить всё что до первого </head> (его если возможно ещё разделить) и уже делать поиск.

Но желательно ещё прогуглить статьи про оптимизацию регулярок.
Меня как раз таки и интересует, как вырезать кусок из большого объёма данных. Естественно я прикрепил не весь свой шаблон, а именно проблемную часть, которая и нагружает процессор, если такие объёмные страницы попадаются. В прикреплённый мной в топике шаблон как раз и вырезает нужную мне часть текста, но очень ресурсозатратно
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)