2012-04-13 1 views
0

У меня есть различные документы HTML, которые я пытаюсь извлечь из ссылок: (1) другие html-документы, (2) файлы изображений, такие как .jpg, .png и .bmp. Мне нужно регулярное выражение, чтобы сделать это, и я не могу понять это.Мне нужно регулярное выражение для извлечения изображений и HTML-документов

Каждый из HTML страниц будет иметь код, подобный следующему:


IMG стиль = "MARGIN-BOTTOM: 20px; MARGIN-LEFT: 20px" ALIGN = правильный SRC = "изображений/sample001. JPG ">

IMG стиль =" MARGIN-BOTTOM: 25px; MARGIN-LEFT: 25px "выравнивать = правый SRC = "изображений/sample002.png">

IMG стиль =" MARGIN-BOTTOM: 20px; MARGIN-LEFT: 20px "align = right src =" images/sample003.bmp ">

HREF = "JavaScript: parent.POPUP ({URL: 'testDoc001.htm', тип: 'общий', ширина: 600, высота: 645})">

HREF = "JavaScript: parent.POPUP ({URL: 'testDoc002.html', тип: 'общий', ширина: 700, высота: 712}) ">


в качестве примера, регулярное выражение будет работать на указанной выше HTML и производят в результате массив:

изображения/sample001.jpg

изображения/sample002.png

изображения/sample003.bmp

testDoc001.htm

testDoc002.html

Может кто-нибудь помочь мне? Спасибо.

ответ

1

Сохраните разочарование и ошибки, с которыми вы столкнетесь, пытаясь проанализировать HTML с помощью регулярных выражений. Используйте парсер HTML, например HTML Agility Pack.

+0

Хотя я согласен, что регулярное выражение и HTML [редко идут вместе] (http://stackoverflow.com/a/1732454/89391), я думаю, что что-то вроде выделения ссылок с регулярными выражениями в порядке. – miku

+0

@miku: Мой опыт в том, что вы можете заставить его работать для небольшого подмножества вещей, с которыми вы его проверяете. И затем появляется какая-то новая конструкция и разрывает ее. Я обнаружил, что использование парсера HTML позволяет мне быстрее работать с кодом, результат более надежный и более способный справляться с изменяющимися условиями. Но ваш пробег может отличаться. –

0

Может быть что-то вдоль линий (с использованием групп) для изображений:

IMG[^>]*src="([^"]*)" 

и что-то подобное для всплывающих окон:

url:'([^']*)' 
+0

Я ввел в свой код: pattern = @ "IMG [^>] * src = '([^'] *) '"; и не получил ничего, чтобы вернуться.Я добавил: pattern = @ "url: '([^'] *) '"; и это дало мне: «url:« testDoc001.htm »и« url: «testDoc002.thml» «Любые идеи о том, как усовершенствовать это регулярное выражение? –

+0

BTW: На каком языке вы используете? – miku

+0

Я использую C#, WPF, VS2010 –

0

in Perl

my $x = "your html"; 

#$1 - is a first group in match - (.+\.(jpg|png)) 
while ($x =~ /<img .* src="(.+\.(jpg|png))"/ig) { 
    print "$1\n"; 
} 

while ($x =~ /<a(.)* href=".*url:('|")(.+\.htm(l)?)('|").*/ig) { 
    print "$3\n"; 
} 

выход:

images/sample001.jpg 
images/sample002.png 
testDoc001.htm 
testDoc002.html 

регэкспы <img .* src="(.+\.(jpg|png))" и <a(.)* href=".*url:('|")(.+\.htm(l)?)('|").* похожи на большинстве языков. ig определяет, что поиск не чувствителен к регистру и несколько совпадений

Смежные вопросы