Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Составить регулярное выражение Delphi > TRegExpr (http://forum.oszone.net/showthread.php?t=297084)

NovaC 18-03-2015 04:30 2484146

Составить регулярное выражение Delphi > TRegExpr
 
День добрый!

Как правильно составить регулярное выражение чтобы получить из следующих строк кодировку 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 2484159

Документация на странице 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 2484181

нужно спарсить с произвольной 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 2484219

Попробуйте регулярку такого вида
Код:

(<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 2484255

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

mrcnn 18-03-2015 12:45 2484269

Возможно так

Код:

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

Код:

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


Время: 21:20.

Время: 21:20.
© OSzone.net 2001-