Использование MATLAB для анализа HTML для URL-адресов в привязках, помогите быстро

У меня строгое ограничение по времени, и мне действительно нужно регулярное выражение для анализа этого типа привязки (все они в этом формате)

<a href="20120620_0512_c2_1024.jpg">20120620_0512_c2_102..&gt;</a>

для URL

20120620_0512_c2_1024.jpg

Я знаю, что это не полный URL, это относительный адрес, пожалуйста, помогите

Вот мой код до сих пор

year = datestr(now,'yyyy');
timestamp = datestr(now,'yyyymmdd');
html = urlread(['http://sohowww.nascom.nasa.gov//data/REPROCESSING/Completed/' year '/c2/' timestamp '/']);
links = regexprep(html, '<a href=.*?>', '');

person DontTurnAround    schedule 20.06.2012    source источник
comment
каков результат, который вы получили до сих пор с вашим кодом? Не могли бы вы показать его и код? :)   -  person Harald Brinkhof    schedule 20.06.2012
comment
лучше всего отредактировать его в своем вопросе. :) поставьте перед ним 4 пробела, и он будет помещен в блок кода   -  person Harald Brinkhof    schedule 20.06.2012
comment
Вам действительно нужно использовать Matlab? Обычно я бы рассматривал возможность использования какого-нибудь языка сценариев, такого как Python или Ruby — у них гораздо лучшие возможности для синтаксического анализа HTML.   -  person jsalonen    schedule 20.06.2012
comment
Связанный вопрос: stackoverflow.com/questions/6582250/   -  person jsalonen    schedule 20.06.2012
comment
Да, это проект для школы и его нужно делать полностью в Matlab   -  person DontTurnAround    schedule 20.06.2012
comment
@jsalonen, что выражение регулярного выражения на самом деле не работает в этом случае, потому что мне нужно получить URL-адрес внутри кавычек, а не то, что находится внутри тега, что и задает этот вопрос.   -  person DontTurnAround    schedule 20.06.2012


Ответы (2)


Попробуйте следующее:

url = 'http://sohowww.nascom.nasa.gov/data/REPROCESSING/Completed/2012/c2/20120620/';
html = urlread(url);
t = regexp(html, '<a href="([^"]*\.jpg)">', 'tokens');
t = [t{:}]'

Результирующий массив ячеек (усеченный):

t = 
    '20120620_0512_c2_1024.jpg'
    '20120620_0512_c2_512.jpg'
    ...
    '20120620_2200_c2_1024.jpg'
    '20120620_2200_c2_512.jpg'
person Amro    schedule 21.06.2012

Я думаю, это то, что вы ищете:

htmlLink = '<a href="20120620_0512_c2_1024.jpg">20120620_0512_c2_102..&gt;</a>';

link = regexprep(htmlLink, '(<a href=")(.*\.jpg)(">.*</a>)', '$2');

link =
20120620_0512_c2_1024.jpg

regexprep работает также для массивов ячеек строк, так что это тоже работает:

htmlLinksCellArray = { '<a href="20120620_0512_c2_1024.jpg">20120620_0512_c2_102..&gt;</a>', '<a href="20120620_0512_c2_1025.jpg">20120620_0512_c2_102..&gt;</a>', '<a href="20120620_0512_c2_1026.jpg">20120620_0512_c2_102..&gt;</a>' };

linksCellArray = regexprep(htmlLinksCellArray, '(<a href=")(.*\.jpg)(">.*</a>)', '$2')

linksCellArray = 
'20120620_0512_c2_1024.jpg'  '20120620_0512_c2_1025.jpg'  '20120620_0512_c2_1026.jpg'
person nrz    schedule 20.06.2012
comment
Это регулярное выражение работает только с этим одним фрагментом html, мне нужно, чтобы он мог анализировать html этой страницы ссылка - person DontTurnAround; 20.06.2012
comment
Но мне очень нравится, что ваше регулярное выражение включает окончание .jpg, что немного упростит мой код. Но я хотел бы иметь возможность анализировать HTML-страницы целиком, а не анализировать массив якорей со страницы. - person DontTurnAround; 21.06.2012