Advanced c# Exam problems Practice - Problem 3. Extract Hyperlinks (Regex)
Здравейте, имам проблем с една задача от практиката за advanced c# изпита, задачата се решава с регекс.
https://judge.softuni.bg/Contests/Practice/Index/84#2 това е линкът към задачата, във regex101.com ми намира всички matches, но в програмата ми не . ето го и Regex-а ми - (?<=<a)(.+)\s?href\s*=\s*("|')(.+?)(\2) , ето го и линкът към решението ми http://pastebin.com/uDbPb4Vi - в Judge вади само 33 точки. Ако някой успее да ми помогне и да ми каже къде бъркам ще съм му много благодарен.
Колега поста ти е отдавна, но все пак тъй като аз в момента се мъчех с тази задача, този регекс "<a([^>]*?)href\s*=\s*("|')(.+?)\2 ", не хваща всичко. Примерно от дългия нулев тест не хваща 2 неща, и едното от тях е "/courses". И на другият колега пробвах регекса ама и той не хваща всичко правилно, дори след твоята "поправка".
Това е страхотна новина :), защото ти sevdalin ще трябва да откриеш решението.
С удоволстиве ще ти помогна със малък joker:
След като разгледах нулевият тест и видях кои изрази не са покрити, останових с не малка изненада че поставянето на стойността на атрибут в кавички не е задължително, нещо което признавам си научавам чак сега (и надявам се ще забравя до 3 дни)
Изразът ще трябва да се промени/допълни по такъв начин, че ако след `href=` не следват кавички да се прихване текстът до първият празен символ - Regex-a оставям на теб, успех
Ето материал който може да помогне за валиирането на израза: https://mathiasbynens.be/notes/unquoted-attribute-values
Поуката е, дори да е позволено, моля ограждайте с кавички стойността на атрибутите
Благодаря за отговора :) Аз тази задача не успях да я напиша. Опитвах се 1 час някъде да измисля регекса, стигнах до някъде ама не точно до където трябва. А и малко ми беше неясно и условието, защото не знам какви възможности може да има input-a, тъй като не съм много на Ти все още с HTML-a.
После гледах тук някакви варианти, но в крайна сметка прецених, че искам да си спестя още 2-3 часа мъки за Регекс и да решавам други задачи.
Не знам дали греша или не, но според мен това е Регекс на едно сравнително високо ниво за общите стандарти, а те според моите наблюдения са, че повечето хора поназнайват добре Регекс в един момент (като го учат) после го позабравят и накрая като им трябва нещо в 80-90% от случаите го търсят вече написано/измислено в мрежата :)