Войти

Показать полную графическую версию : Составить регулярное выражение Delphi > TRegExpr


NovaC
18-03-2015, 04:30
День добрый!

Как правильно составить регулярное выражение чтобы получить из следующих строк кодировку UTF-8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset="UTF-8" />
<meta charset="UTF-8">
<meta http-equiv="Content-Type" charset=UTF-8" />

используется Delphi > TRegExpr

спасибо!

mrcnn
18-03-2015, 07:18
Документация на странице http://regexpstudio.com/TRegExpr/Help/About.html
Для замены подстроки или символа на другой символ используется метод класса Substitute.
Кодовая таблица для кодировки UTF-8 : http://www.unicodetools.com/unicode/codepage-utf8.php
Вам нужно перекодировать UTF-8 в ASCII или ASCII в UTF-8 ?

Для встречающихся в данных строках символов ASCII и UTF-8 тождественны, т.е. перекодировка может не требоваться.

NovaC
18-03-2015, 09:30
нужно спарсить с произвольной html страницы установленную в её метатегах кодировку
один из вариантов:
Expression:= '<meta(.*)charset=(.*)"(\s*/?)>';
но он работает до тех пор пока в 1 строка = 1 метатег. т.е. если строки склеены то работает некорректно, например
<meta name="KEYWORDS" content="фото объектов с мягкой черепицей, страница 2, Москва, Shinglas" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta><meta name="DESCRIPTION" content="В данном разделе сайта компании представлены фото объектов с мягкой черепицей Shinglas, страница 2." /></meta>

mrcnn
18-03-2015, 11:06
Попробуйте регулярку такого вида
(<meta?).*?charset=(.*?)\"

Вроде бы достаточно такой регулярки в том случае, если на всей странице один charset.
/charset=(.*?)\"/

Работает или нет, проверял в программе на Perl
$str="<meta name=\"KEYWORDS\" content=\"фото объектов с мягкой черепицей, страница 2, Москва, Shinglas\" \/><meta http-equiv= \"Content-Type\" content=\"text\/html; charset=utf-8\"><\/meta><meta name=\"DESCRIPTION\" content=\"В данном разделе сайта компании представлены фото объектов с мягкой черепицей Shinglas, страница 2.\" \/><\/meta>";
print $str;
$str =~ /(<meta?).*?charset=(.*?)\"/;
$d = $2;
print "\n";
print $d;

NovaC
18-03-2015, 12:26
спасибо!
а можно составить одну регулярку так чтобы бралось значение TITLE из следующих вариантов строк:
<TITLE>НАЗВАНИЕ</TITLE>
<meta name="title" content="НАЗВАНИЕ">

mrcnn
18-03-2015, 12:45
Возможно так

<title>(.*?)<
с идентификатором, что символы верхнего регистра и нижнего регистра равны

<meta.*?title.*?content=\"(.*?)\"




© OSzone.net 2001-2012