[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярки так их...за ногу
Krevedko
Помогите. Срочно надо !

Упрощенно нужно так.
К примеру есть словосочетание

"Мой день рождения"

Мне недо получить все, что находится между словами Мой и рождения (т.е. слово "день")

Подскажите плз





Спустя 15 минут, 11 секунд (1.11.2009 - 15:17) Krevedko написал(а):
некорректно поставил задачу...
полее подробно- надо найти в большом тексте словосочетание , начинающееся на Мой и кончающееся на рождения и выделить слово/слова между ними.

Т.е. я так понимаю регуяркой получаем эту строку в массив и вытягиваем нужное через str_replace ?

Спустя 15 минут, 59 секунд (1.11.2009 - 15:33) krasilich написал(а):
PHP
preg_match('|мой(.*)рождения|is'$text$array)
$str $array[1];


В переменной str будет все что найдеться между двумя словами

Спустя 15 минут, 11 секунд (1.11.2009 - 15:48) Krevedko написал(а):
спасибо..почти работает

PHP
$wmz $_POST['textfield'];
    
$file file_get_contents("http://passport.webmoney.ru/asp/CertView.asp?purse=".$wmz);
    
$pattern '|Дата регистрации в системе:</td>(.*)года</td>|is';
    
    
preg_match($pattern$file$matches);    
    echo 
$matches[1];


дату выводит, но за ней много лишнего :/

Спустя 5 минут, 14 секунд (1.11.2009 - 15:54) krasilich написал(а):
Нужно взглянуть на текст, который находиться в $file.

Спустя 4 минуты, 16 секунд (1.11.2009 - 15:58) Krevedko написал(а):
ну скажем вот кусок текста
HTML
<td align="right">Дата регистрации в системе:</td>
<td class="notbig" colspan="2">30 Августа 2006 года</td>
</tr>
<tr>
<td align="right"><b><a href="CertHelp.asp?q=DBC75182-2183-43F7-8B1F-9900A1377D67" target="_blank" title="Что такое бизнес уровень?">
BL:
</a></b></td>
<td class="notbig" colspan="2"><img src="https://stats.wmtransfer.com/Levels/pWMIDLevel.aspx?wmid=379979148613&amp;w=35&amp;h=18&amp;bg=0XDBE2E9" alt="Бизнес уровень [BL]" border="0" width="35" height="18" align="absmiddle">


мне нужна только часть, где 30 Августа 2006 года (она будет каждый раз разная)

а он мне выковыривает

HTML
<td class="notbig" colspan="2">30 Августа 2006 года</td>
</tr>
<tr>
<td align="right"><b><a href="CertHelp.asp?q=DBC75182-2183-43F7-8B1F-9900A1377D67" target="_blank" title="Что такое бизнес уровень?">
BL:
</a></b></td>
<td class="notbig" colspan="2"><img src="https://stats.wmtransfer.com/Levels/pWMIDLevel.aspx?wmid=379979148613&amp;w=35&amp;h=18&amp;bg=0XDBE2E9" alt="Бизнес уровень [BL]" border="0" width="35" height="18" align="absmiddle">и дальше...........

Спустя 7 минут, 21 секунда (1.11.2009 - 16:05) Krevedko написал(а):
кстати так

$pattern = '|Дата регистрации в системе:</td><td class="notbig" colspan="2">(.*)года</td>|is';

он уже ничего не находит...
\n ставил, тоже не катит. может не так ставил ....

Спустя 1 минута, 34 секунды (1.11.2009 - 16:07) krasilich написал(а):
PHP
$pattern '|<td align="right">Дата регистрации в системе:</td><td class="notbig" colspan="2">(.*)</td></tr><tr>|is';



Но уверен что можно сделать куда красивее

Спустя 1 минута, 58 секунд (1.11.2009 - 16:09) krasilich написал(а):
А вообще, скачай себе програмку The Regex Coach, очень полезная штука для составления регулярных выражений.

Спустя 51 секунда (1.11.2009 - 16:10) Krevedko написал(а):
ничего не находит. видимо ему не нравятся переносы строк

Спустя 3 минуты, 34 секунды (1.11.2009 - 16:13) Krevedko написал(а):
PHP
$wmz $_POST['textfield'];
    
$file file_get_contents("http://passport.webmoney.ru/asp/CertView.asp?purse=".$wmz);
    
$pattern '|Дата регистрации в системе:</td>(.*)года</td>|is';
    
    
preg_match($pattern$file$matches);    
    
    
$pattern '|<td class="notbig" colspan="2">(.*)года</td>|is'
    
preg_match($pattern$matches[1], $result);    
    echo 
$result[1];


вот так работает. но это какой-то тупняк

Спустя 2 минуты, 9 секунд (1.11.2009 - 16:15) krasilich написал(а):
PHP
$pattern '|<td align="right">Дата регистрации в системе:</td>[\n]<td class="notbig" colspan="2">((.*)года)</td>|is';

Спустя 6 минут, 32 секунды (1.11.2009 - 16:22) Krevedko написал(а):
не работает biggrin.gif

ладно, спасибо за помощь. (огромное спасибо). Я потом еще поковыряю и улучшу...сделать надо срочно, а мне еще дату обработать надо.

Спустя 6 минут, 37 секунд (1.11.2009 - 16:28) glock18 написал(а):
еще варианты? smile.gif

Спустя 6 минут, 12 секунд (1.11.2009 - 16:35) krasilich написал(а):
в regex coach последний вариант работает=)))

Спустя 8 минут, 44 секунды (1.11.2009 - 16:43) Krevedko написал(а):
забей ) ну хочет Вася, чтобы я говнокод писал. Пусть так и будет ))
Щас еще вопрос назреет, если у меня не получится тут одна штука дальше

Спустя 29 минут, 40 секунд (1.11.2009 - 17:13) Krevedko написал(а):
вопрос вроде сам разрешил, но как-то жутко получилось...наверное опять говнокод unsure.gif зато сам сделал в обнимку с мануалом ))

Вообщем надо посчитать как давно юзер зарегился в системе.
Дату мы спарсили оттуда. Дальше собственно я сделал так:

PHP
preg_match($pattern, $matches[1], $result);    
    
    $month_rus 
= array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
    $month_eng = array('January', 'February', 'March', 'April', 'May', 'June', 'Июля', 'August', 'September', 'October', 'November', 'December');
    
    $reg_date 
= str_replace($month_rus, $month_eng, $result[1]);
    
    $now_date 
= date("d F Y");
    
    
//Переводим даты во время
    $now = strtotime($now_date);
    echo '<br>';
    $new = strtotime($reg_date);
    
    
//Переводим разницу времени в количество дней
    $time = $now - $new;
    echo intval($time / 86400);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.