Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

05.02.2010, 17:47
|
|
Новичок
Регистрация: 10.01.2007
Сообщений: 16
Провел на форуме: 109680
Репутация:
2
|
|
Задача: составить регулярку.
Условие, максимально 4 параметра 10D 10H 10M 10S, но все 4 никогда не встрчаются, обычно не более двух:
а) на пыхе с использование preg_match_all
б) парсим различные результаты, варианты входных данных:
1) 6D 6H
2) 9H 5M
3) 1D 10M
4) 10M 14S
Сами параметры могут быть любыми, от 0 до 59.
Необходимо несмотря из входных данных заполнить массив:
[0] => Array
(
[0] => 6
[1] => ''
[2] => 1
[3] => ''
[1] => Array
[0] => 6
[1] => 9
[2] => ''
[3] => ''
[2] => Array
[0] => ''
[1] => 5
[2] => 10
[3] => 10
[3] => Array
[0] => ''
[1] => ''
[2] => ''
[3] => 14
1й подмассив - D (дни), 2й подмассив - H (часы), 3й подмассив - M (минуты), 4й подмассив - S (секунды)
Есть идеи?
|
|
|

06.02.2010, 00:17
|
|
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме: 4778940
Репутация:
1257
|
|
Сообщение от m0Hze
PHP код:
$text = "
<select id='w2'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
</select>";
preg_match("#id='w2'>(.*)<\/select>#s", $text, $match);
echo strip_tags($match[1]);
спасибо кэп! Я имел в виду, что мне нужно получить как value так и само значение между > 1<.
|
|
|

06.02.2010, 11:43
|
|
Участник форума
Регистрация: 31.01.2010
Сообщений: 170
Провел на форуме: 1442841
Репутация:
63
|
|
<?
$text="<select id='w2'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>";
preg_match("/<select id='w2'>\r\n<option value='([0-9])'>(.*)<\/option>/s", $text, $m);
preg_match("/<select id='w2'>\r\n(<option value='([0-9])'>(.*)<\/option>)/s", $text, $s);
echo "сначала $s[1]<br> вконце $m[2]";
?>
пробуй)
З.Ы. Да,я извращенец
Последний раз редактировалось Compton; 06.02.2010 в 17:26..
|
|
|

07.02.2010, 14:44
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
Получаю от сервера ответ в виде неполного XML (без заголовка <?xml ... ?>.
Нужно распарсить таким образом: содержимое <input_img> в <img src="..." >, а <description> в <b>...</b> и вывести по порядку, как в XML'е.
Как лучше сделать? Дописать заголовок в начало ( $request = '<?xml version="1.0" encoding="UTF-8"?>'.curl_exec($ch); ) и использовать xml_parser или нечего не записывать и регулярками пройтись? Помогите распарсить.
Код:
<?xml version="1.0" encoding="UTF-8"?>
<math>
<variant>
<input_img>dss.localhost.ru/masima/Render.app.php/execute?id=2651267</input_img>
<solve>
<description>5</description>
<answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img>
</solve>
<solve>
<description>5</description><answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img></solve>
</variant>
</math>
Последний раз редактировалось draliokero; 07.02.2010 в 15:27..
|
|
|

07.02.2010, 15:33
|
|
Участник форума
Регистрация: 31.01.2010
Сообщений: 170
Провел на форуме: 1442841
Репутация:
63
|
|
может просто через preg_replace теги заменить?
или я что не так понял?
|
|
|

07.02.2010, 15:35
|
|
Участник форума
Регистрация: 20.04.2007
Сообщений: 174
Провел на форуме: 2310282
Репутация:
149
|
|
Сообщение от Compton
может просто через preg_replace теги заменить?
или я что не так понял?
Я тоже не совсем догоняю, но попробую предложить:
PHP код:
<?php
$result = '<?xml version="1.0" encoding="UTF-8"?>
<math>
<variant>
<input_img>dss.localhost.ru/masima/Render.app.php/execute?id=2651267</input_img>
<solve>
<description>5</description>
<answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img>
</solve>
<solve>
<description>5</description><answer_img>dss.localhost.ru/masima/Render.app.php/execute?id=1694028</answer_img></solve>
</variant>
</math>';
$result = preg_replace('#<input_img>(.*?)<\/input_img>#', '<img src="\\1" >', $result);
$result = preg_replace('#<description>(.*?)<\/description>#', '<b>\\1</b>', $result);
echo $result;
?>
|
|
|

07.02.2010, 16:42
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
А можно сделать так, чтобы один массив заполнялся согласно одному рег. выражению:
<description>(.*?)<\/description>|<input_img>(.*?)<\/input_img> ?
preg_match_all вроде, но там многомерный массив получается и повторяются результаты
|
|
|

07.02.2010, 19:16
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Убери с регулярки скобки, оставив просто .* тоесть:
PHP код:
preg_match_all('#<description>.*<\/description>|<input_img>.*<\/input_img>#', $where, $matches);
|
|
|

10.02.2010, 22:47
|
|
Участник форума
Регистрация: 31.01.2010
Сообщений: 170
Провел на форуме: 1442841
Репутация:
63
|
|
Strilo4ka
если его не экранизировать,то это значит,что шаблон закончен
|
|
|

10.02.2010, 23:13
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Сообщение от Compton
Strilo4ka
если его не экранизировать,то это значит,что шаблон закончен
Посмотри внимательнее... Шаблон открывается символом "#", тобишь экранировать слеш в этом случае нету потребности. Если бы шаблон начинался "/", то тогда да - экранировать надо.
Последний раз редактировалось mailbrush; 10.02.2010 в 23:15..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|