Регулярные выражения и Русский язык

Вадим

Guest
Регулярные выражения и Русский язык

Есть простая казалось бы задача. Нужна возможнось вы цеплять русский текст из html тэгов (из alt, tittle, <meta name.. content>). Как выдрать именно русский текст. Помогите кто может, очень нужно.

Вот один из моих шаблонов:
preg_match_all ( "/(?<=content=')(?????)(?='>)/", $meta, $key);
????? - как задать русский текст. :confused:
 

Вадим

Guest
Просидел всю ночь над этой функцией, и ВОТ оно ... вроде как все работает, но нет. Опять глюк, на жтот раз, уже с числами. Получилось что функция вытаскивает все как надо а на числах заваливается. Повторно считывает кусок кода.

Материал для раздумий.
1. Есть такой код.
[name]
<meta name='title' content='какое-то описание'>
<meta name='keywords' content='ключевые слова'>
<meta name='description' content='описание сайта'>
<meta name='author' content='http://www.[home]'>
<meta name='ask' content='Дорогие Пауки и Модераторы каталогов! Присылайте сюда побольше посетителей, пожалуйста! Это самый лучший сайт о ...'>
<meta name='document-state' content='dynamic'>
<meta name='revisit-after' content='3 days'> // валится тут
<meta name='robots' content='index,all'>
<meta name='url' content='http://www.[home]'>
[:name:]


[http-equiv]
<meta http-equiv='subject' content='какое-то описание'>
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='content-type' content='text/html; charset=windows-1251 '> // валится тут
<meta http-equiv='reply-to' content='info@[home]'>
[:http-equiv:]


[content]
<meta content='webmaster' name='htttp://www.site.ru'>
[:content:]
// Даже чуть с псувдокодом
2. Надо получить двумерный массив.
Ключевой параметр(какой именно) => массив параметр =значение>
Написал такой код (зацените и осудите) и вроде как все работает, но если нет чисел.

function meta_parser ( $meta )
{
global $arr_meta;
// ключевые тэги ( пары ключ = параметр )
$tags [ "name" ] = "content";
$tags [ "http-equiv" ] = "content";
$tags [ "content" ] = "name";

// выборка нужных данных из шаблона
while ( $param = each( $tags ) )
{
// обработка псевдокода с ключевым параметром $tags [ "key" ]
preg_match_all ( "/(?<=\[".$param [ key ]."\])([\D]+)(?=\[:".$param [ key ].":\])/", $meta, $matches );
foreach ( $matches[0] as $item )
{
$name_txt = $item."<br>";
}

// получение ключа тэга
preg_match_all ( "/(?<=".$param [ key ]."=')([\S]+)(?=' )/", $name_txt, $matches );
$i = 0;
foreach ( $matches[0] as $item )
{
$key[$i] = $item;
$i++;
}

// получение значения тэга
//??(БОЛЬНОЕ МЕСТО <- Лечить)??
preg_match_all ( "/(?<=".$param [ value ]."=')([\S ]+)(?='>)/", $name_txt, $matches );
$i = 0;
foreach ( $matches[0] as $item )
{
// сбор асоциативного массива тэгов парой ключ = значение
$name[ $key[$i] ] = $item;
$key[$i]." = ".$item."<br>";
$i++;
}

// двумерный массив параметр = массив тэгов
$arr_meta [ $param [ key ] ] = $name;
$name = array();
$k++;
}


// модуль чисто формирующий список для проверки верности на глаз
while ( $element = each( $arr_meta ) )
{
print $element[ "key" ]." = <br>";
while ( $el = each( $element[ "value" ] ) )
{
print $el[ "key" ]." = ".$el[ "value" ]."<br>";
}
}
}

Подскажите кто может! А код кому-нить и самому пригодится. :)
 

fixxxer

К.О.
Партнер клуба
ты думаешь кто то будет читать пять экранов твоего бреда?
 

Яро

бард-скальд
Вадим
// модуль чисто формирующий список для проверки верности на глаз
while ( $element = each( $arr_meta ) )
{
print $element[ "key" ]." = <br>";
while ( $el = each( $element[ "value" ] ) )
{
print $el[ "key" ]." = ".$el[ "value" ]."<br>";
}
}
}
У меня, конечно, дикий офтоп, но чем

echo '<pre>';
print_r($arr_meta);
echo '</pre>';

не угодил?
 

Вадим

Guest
fixxxer
Тебе никто не говорил что о чужив трудах просто некрасиво столь категорично выражаться. Если не хочешь не читай.


Яро
Ну так мне просто удобнее смотреть.
Ну и вообще-то я че-то и забыл про print_r когда писал. ;-)
 

Фанат

oncle terrible
Команда форума
Вадим
а тебе не приходила в голову мысль не огрызнуться, а принять замечание фиксера к сведению?
Я все понимаю - ты у нас молодец, а он - злопыхатель.
Но есть одна маленькая деталь. Незначительная.
ответ на вопрос нужен тебе, а не ему.
И, в общем, честное слово - ему ни жарко ни холодно будет от твоей реакции. Но, может быть, не он один так думает?
И сократив код ты поможешь себе?

А на счет бреда... Может, и некрасиво, конечно, но зато правда.
 

Яро

бард-скальд
Вадим
Тебе никто не говорил что о чужив трудах просто некрасиво столь категорично выражаться. Если не хочешь не читай.
Ты знаешь, я может не согласен с формой его выражения, но с содержанием вполне. Тут все занятые люди. Выцепи критическое место и нам покажи, тогда можешь надеятся на быстрый и точный ответ. А читать чужой код такого размера, осмысливать его, потом самому искать критическое место, выдавать тебе ответ. Извини, но лично у меня в сутках 24 часа. Было бы 30 с радостью занялся бы этим. Если выразился категорично, ну извини ;)
 

Вадим

Guest
Фанат и Яро, спасибо за критаку, вполне справедливое замечание. Каюсь виноват ( у самого 24 часа в сутках и по 20 из них сейчас заняты).
fixxxer извини, погорячился.:rolleyes:

1. Есть такой html-код.
[http-equiv]
<meta http-equiv='content-type' content='text/html; charset=windows-1251 '> // валится тут
[:http-equiv:]

Нужно выцепить 'text/html; charset=windows-1251 '. Все бы хорошо, другие тэги цепляются, но если в них нет чисел.

Шаблон такой:
// попытка выцепить 'text/html; charset=windows-1251
//??(БОЛЬНОЕ МЕСТО <- Лечить)??
preg_match_all ( "/?<=content=')([\S ]+)(?='> )/", $content_txt, $matches );

На этом шаблоне система валится в местах где есть числа.
т.н. она должна выцеплять любой текст (независимо от языка) вместе с числами.
Задаю \S - вроде любые знаки кроме пробела, если не так поправьте.:confused:

Полную версию см. выше.
 

Вадим

Guest
mani13 спасибо за совет, но пардон, не сказал.
Нужно чтобы он одинаково вытаскивал как русский текст, так и английский. И при этом не запарывался на числах.
<meta name='description' content='описание сайта'>
 

mani13

Новичок
Автор оригинала: Вадим
mani13 спасибо за совет, но пардон, не сказал.
Нужно чтобы он одинаково вытаскивал как русский текст, так и английский. И при этом не запарывался на числах.
<meta name='description' content='описание сайта'>
Тогда смотри ИЛИ
 
Сверху