Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсинг таблицы в переменны, regexp 
:(
    Опции темы
K0r0l
Дата 27.5.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



записи в таблице забиты следующим образом, и хотелось бы с помощью regexp`а разделить 4 крайних td на 4 переменных, сложность заключается в том что хотя эти числа и имеют стандартный вид x,xxxx но иногда вместо числа ничего нету...
Код

<td>some constant text</td>
<td></td>
<td>1,000</td>
<td>0,944</td>
<td>0,351</td>
<td>0,999</td>


мучался мучался но само регулярное выражения для такого случая как-то не получается написать
Код

/(?<=<td>some\sconstant\stext<\/td>\s<td><\/td>\s)(<td>\d\,\d{3}<\/td>){4}(?=<\/td>)/

такое вот не работает =(



PM MAIL WWW ICQ   Вверх
gta4kv
Дата 27.5.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 1
Всего: 91



а почему бы не сделать:

Код

$str = <<<STR
<td>some constant text</td>
<td></td>
<td>1,000</td>
<td>0,944</td>
<td>0,351</td>
<td>0,999</td>
STR;
preg_match_all( "#<td>(.*?)<\/td>#iU", $str, $result );


?  smile

Добавлено через 3 минуты и 39 секунд
В $result[ 1 ]; все что вам надо будет.

Это сообщение отредактировал(а) gta4kv - 27.5.2008, 23:50
PM MAIL   Вверх
K0r0l
Дата 28.5.2008, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



не... так засовывается все между первым и крайним <td>
PM MAIL WWW ICQ   Вверх
gta4kv
Дата 28.5.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 1
Всего: 91



K0r0l, а что надо?

Добавлено через 1 минуту и 25 секунд
У меня, простите, все нормально.

Код

  array(6) {
    [0]=>
    string(18) "some constant text"
    [1]=>
    string(0) ""
    [2]=>
    string(5) "1,000"
    [3]=>
    string(5) "0,944"
    [4]=>
    string(5) "0,351"
    [5]=>
    string(5) "0,999"
  }


все  по разным переменным.
PM MAIL   Вверх
K0r0l
Дата 28.5.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



хм видимо то что у меня вверху в коде как-то повлияло..

у меня вот такая штука заработала

Код

preg_match_all("/(?<=<td>)[^\s]{0,5}(?=<\/td>)/i", $text, $result);


кстати а такой вопрос а можно ли за один проход preg_match_all`ом выбрать по нескольким условиям взаимно не пересекающимся?
ну что-то типа массива $pattern в preg_replace...
PM MAIL WWW ICQ   Вверх
gta4kv
Дата 28.5.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 1
Всего: 91



K0r0l,  а вы попробуйте массив загнать с условиями. ;)

PM MAIL   Вверх
K0r0l
Дата 28.5.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



в смысле?

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

Код

<tr>
<td style='white-space:nowrap;'>2008-04-25<br />2008-04-27</td>
<td><a href='?a=342&ladder_id=3&competition_id=1158&' title='blablabla'> TITLE!!  1 2 3 </a></td>

<td>some constant text</td>
<td></td>
<td>0,000</td>
<td>0,000</td>
<td> --нету цифры а могла и быть-- </td>
<td>0,999</td>
<td></td>
<td></td>
<td>0,0</td><td></td><td>0</td><td style='white-space:nowrap;'>2008-04-01</td><td>7930</td><td>124</td><td>4</td><td></td><td></td><td style='white-space:nowrap;'><span style='color:red'>2008-05-27<br .>05:43+0</span></td>
</tr>


из этой штуки надо забрать номер, заголовок и три цифры вида x,xxx - выделил жирным то что надо вытащить

сообсна написал несколько match`ев для этого
Код

$res2 = preg_match_all("/(?<=ranking'>)[-a-zA-Z0-9_\s]*(?=<\/a>)/", $r, $text2);
$res1 = preg_match_all("/(?<==)[0-9]{4}(?=&)/i", $r, $text1);
$res3 = preg_match_all("/(?<=<td.*>)[^\s]{0,5}(?=<\/td>)/i", $r, $text3); //- крайняя совместными усилиями тут =)


вот и возник вопрос нельзя ли это в один preg_match запихать.. и если можно то как, потому что регулярными выражениями к своему стыду только сча начал пользоваться  smile 



Это сообщение отредактировал(а) K0r0l - 28.5.2008, 00:39
PM MAIL WWW ICQ   Вверх
gta4kv
Дата 28.5.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 1
Всего: 91



вас спасет моя регулярка, ОДНА. копайте почему она у вас не работает.
PM MAIL   Вверх
K0r0l
Дата 29.5.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.10.2004
Где: Deeptown

Репутация: нет
Всего: нет



спасибо =)
 
только я как более простой вариант решил сделать это через preg_replace
шаблоном описываю кусок между <tr> и </tr> и помечаю там круглыми скобками нужные мне для дальнейшего использования куски
парсинг такого куска
Код

<tr>
<td style='white-space:nowrap;'>2008-04-19<br />2008-04-26</td>
<td><a href='?a=342&ladder_id=3&competition_id=1106&' title='Ranking points for the competition in this ranking'>-- ТУТ НАЗВАНИЕ --</a></td>

<td>Paragliding XC</td>
<td></td>
<td>1,000</td>
<td>0,942</td>
<td>0,351</td>
<td>0,999</td>
<td>5</td>
<td></td>
<td>2395,8</td><td>12658,7</td><td>57</td><td style='white-space:nowrap;'>2008-04-01</td><td>8098</td><td>126</td><td>5</td><td>93,000</td><td>2426,000</td><td style='white-space:nowrap;'>2008-04-30<br .>22:23+0</td>

</tr>


только пока чего-то не работает.. не подскажите плз в чем ошибаюсь?
Код

$r= preg_replace("/<tr>[.]*competition_id=([0-9]{4})&[.]*>([-a-zA-Z0-9_\s]*08[-a-zA-Z0-9_\s]*)<\/a>[.]*<td><\/td>[\s]*<td>([^\s]{0,5})<\/td>[\s]*<td>([^\s]{0,5})<\/td>[\s]*<td>([^\s]{0,5})<\/td>[.]*<\/tr>/", "\\1 | \\2 | \\3 | \\4 | \\5<br>", $r);


Это сообщение отредактировал(а) K0r0l - 29.5.2008, 00:55
PM MAIL WWW ICQ   Вверх
gta4kv
Дата 29.5.2008, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 1
Всего: 91



Цитата

не подскажите плз в чем ошибаюсь?

в реализации, если регулярка не работает, разбей ее на пять частей(или сколько их там у тебя) зачем в одну все пихать.
методом исключения придешь к неверной.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.