Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 4

Catastrophic Backtracking в регулярном выражении

09.04.2020, 17:15. Показов 662. Ответов 4

Author24 — интернет-сервис помощи студентам
При написании небольшого парсера поисковой системы возникал проблема с регулярным выражением:

Есть регулярное выражение для парсинга HTML страницы:

var pattern = @
<div class="A(.*?)(href=")(?<href>.*?)"(.*?)< div class="B">(?<anchor>.*?)<.*?><div class="C yDYNvb">(?<sniplet>.*?)</div>

при парсинге страницы все работает.

Но если происходит смена дизайна на странице, например: <div class="B заменяется на <div class="K происходит Catastrophic backtracking и начинает зависать парсер.

Задача: подкорректировать регулярное выражение так, чтобы в выше указанном случае смены дизайна страницы не происходило Catastrophic backtracking, а парсер просто переставал искать (Ничего не найдено или ошибка)


Заранее благодарен за помощь
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.04.2020, 17:15
Ответы с готовыми решениями:

Разобраться в регулярном выражении
&quot;(?&lt;=&lt;img+?src=\&quot; )+&quot; вон оно я не могу понять что значит и \&quot; )+ ...

Проверка на регистр в регулярном выражении
Имеется форма в которой richTextBox и Button при нажатии на Button создается массив string keywords = { &quot;INSERT&quot;,...

Тире и дефис в регулярном выражении
Приветствую! Задача: Найти в строке определенные &quot;недопустимые&quot; символы, которые не входят в список допустимых. Допустимые это: буквы,...

4
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17899 / 13995 / 5345
Регистрация: 17.03.2014
Сообщений: 28,654
Записей в блоге: 1
09.04.2020, 23:47
fromes, выкидываем регулярки и переходим на использование специализированных библиотек парсинга HTML таких как HtmlAgilityPack илиAngleSharp.
0
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 4
10.04.2020, 11:16  [ТС]
OwenGlendower

Спасибо. Я знаю про данные библиотеки. Но у меня задача именно регулярки.

Программа пишется на C#.
Мне дали задание создать регулярку на основе выданного шаблона в RegEx для парсинга страниц в Гугл, но пока я в регулярных выражениях новичек и очень много не понятно в них, хоть и прочитал n-во количество информации о них.


Сама регулярка

Code Скопировано
1
<div class="KJDcUb(.*?)(href=")(?<href>.*?)"(.*?)<div class="PpBGzd YcUVQe">(?<anchor>.*?)<.*?><div class="MUxGbd yDYNvb">(?<sniplet>.*?)</div>

Задание подкорректировать ее так, чтобы при смене дизайна страницы (например сменили <div class="PpBGzd YcUVQe"> на <div class="ApBGzd YcUVQe"> ) не происходил бесконечный бэктракинг, а просто было "Не найдено или ошибка"

Пример кода страницы, на которой она работает:
https://wdho.ru/9olL


Пример измененной страницы:
https://wdho.ru/9olP

Заранее спасибо за помощь.
0
1131 / 681 / 410
Регистрация: 07.11.2015
Сообщений: 1,093
17.04.2020, 01:41
Code Скопировано
1
<div class="KJDcUb"><a [^>]*href="(?<href>[^"]*)"(?>.*?<div [^>]+>(?<anchor>[^<]+)).*?<div [^>]+>(?<sniplet>[^<]+)
0
0 / 0 / 0
Регистрация: 07.04.2020
Сообщений: 4
20.04.2020, 10:46  [ТС]
Спасибо большое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2020, 10:46
Помогаю со студенческими работами здесь

Full match в регулярном выражении
Доброго времени суток! Столкнулся с проблемой в Regex: Есть строка &quot;наименование оказанной услуги&quot; и регулярка...

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

Что не правильно в этом регулярном выражении
static string pattern = @&quot;({1,1}){2,9}+_({1,1}){2,9}&quot;; Regex regex = new Regex(pattern); на строку &quot;Regex regex = new...

Что означают эти символы в регулярном выражении?
Добрый день! есть регулярное выражение, которое проверяет правильность почтового адреса (один из нагугленных вариантов): ...

Что может быть не так в регулярном выражении
public void HtmlRegex(string html) { string pattern = @&quot;+,\W+,\W+,\S+&quot;; Regex rgx = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер