Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
Vitaly2106

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Спасибо, извините за тупость, в программировании плохо разбираюсь...
 
Тоесть этот код нужно поместить перед участком где заносятся данные в базу?
 
Кстати, ещё пробовал такой вариант добавить перед этим

Код:
mysql_query("UPDATE `table` SET `link` = '".$newlink."' WHERE `link` = '".$row['link']."';");  

Добавить этот код:

Код:
$a = 'domen.ru';
if(strpos($newlink, $a))  
    $newlink= str_replace($a, '' , $newlink);

Но и он почему-то не сработал...(

Всего записей: 23 | Зарегистр. 14-08-2012 | Отправлено: 01:33 19-11-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitaly2106

Цитата:
Тоесть этот код нужно поместить перед участком где заносятся данные в базу?

нет, этот код нужно использовать вместо вашей замены регулярным выражением
 

Цитата:
$newlink=preg_replace("'<[\/\!]*a[^<>]*?>'si", '', $row['link']);  

 
ну, то есть  
$newlink = preg_replace_callback("'<a([^<>]*?)>.*</a>'Usi", 'myfun',  $row['link']);
 
и код функции myfun

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:45 19-11-2013 | Исправлено: Cheery, 01:46 19-11-2013
Vitaly2106

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, насколько я понял, оно должно выглядеть так: ?

Код:
<?php    
 $db = mysql_connect('host', 'user', 'password');  
 mysql_select_db('database');    
 $query = "SELECT * FROM `table` WHERE `link` LIKE '%\<a %'";  
 $res = mysql_query($query);  
 while($row = mysql_fetch_array($res)){  
     $newlink = preg_replace_callback("'<a([^<>]*?)>.*</a>'Usi", 'myfun',  $row['link']);
     mysql_query("UPDATE `table` SET `link` = '".$newlink."' WHERE `link` = '".$row['link']."';");  
 }  
 function myfun($args)  
  {  
      if (stripos($args[0], 'site1') !== false)  
         return $args[0];  
  }
 mysql_close($db);  
 ?>

 
1. Когда скрипт выполнился, он удалил все ссылки, кроме указанного домена в if (stripos($args[0], 'site1') !== false)  
Нельзя ли сделать наоборот? Тоесть чтоб он удалял ссылку, ту которую я укажу?
2. Можно вернуть, как было в моём изначальном скрипте, тоесть он удалял ссылку, при этом оставлял текст который был между тегами  
<a ...>тут оставлять</a>

Всего записей: 23 | Зарегистр. 14-08-2012 | Отправлено: 02:44 19-11-2013 | Исправлено: Vitaly2106, 02:45 19-11-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitaly2106
preg_replace_callback("'<a([^<>]*?)>(.*)</a>'Usi",
и

Код:
 function myfun($args)
 {
     if (stripos($args[0], 'site1') === false)
        return $args[2];
     else
        return $args[0];
 }


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:09 19-11-2013
Vitaly2106

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Спасибо, попробовал, скрипт всё равно удаляет все ссылки кроме указанного, а не наоборот (удалить только указанную ссылку)... Можно ещё что-то сделать?

Всего записей: 23 | Зарегистр. 14-08-2012 | Отправлено: 09:40 19-11-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitaly2106
ну включите голову то )

Цитата:
 if (stripos($args[0], 'site1')  !==  false)



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:04 19-11-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
День добрый и с наступающим Вас!
Помогите составить регулярное выражение.
Имеется строка вот такого вида:

Код:
 
"id":"1398003215789","id_city":"70000001","id_org":"79098069","lon":"85.021045","lat":"56.4788133333333","alt":"0","velocity":"0","timestamp":"2013-12-30 16:05:59","status":0+
"id":"1422001602862","id_city":"70000001","id_org":"79098087","lon":"85.1702683333333","lat":"56.4931316666667","alt":"0","velocity":"0","timestamp":"2013-12-30 16:06:23","status":0+
"id":"1137010539723","id_city":"70000001","id_org":"79098069","lon":"84.9636675666667","lat":"56.5201652833333","alt":"0","velocity":"17","timestamp":"2013-12-30 16:06:38","status":0
 

Нужно оставить только те строки, где "id_org":"79098069". Я имею ввиду всю строку целиком, от id до status.
Ума не приложу как это будет выглядеть. Если я правильно все понял нужно использовать preg_split()

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 13:38 30-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Код:
$t = '{"CARS":[{"id":"1137007760468","id_city":"70000001","id_org":"79098069","lon":"84.9732188333333","lat":"56.525168","alt":"95","velocity":"0","timestamp":"2013-12-28 02:35:36","status":0}]}';
$ar = json_decode($t, true);
foreach($ar['CARS'] as &$car)
{
    if ($car['id_org'] != '79098069')
        $car = null;
}
$ar = array_filter($ar['CARS']);
var_dump($ar);


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:58 30-12-2013
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Cheery то что нужно. С Новым годом!!!

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 22:14 30-12-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хочу вырезать информацию из ссылок, дивов и тд через  preg_match_all
Информация с другого сайта. Пробовал вырезать только один маленький кусочек и все работало,но когда пробую вырезать все сразу то нечего.
Я плохо знаю всю эту штуку, и кроме как экранировать кавычки больше нечего не знаю
var_dump показывает вот что  

Код:
 
array(10) {
  [0]=>
  array(0) {
  }
  [1]=>
  array(0) {
  }
  [2]=>
  array(0) {
  }
......
.....
....
}
 

И таки сам php код вот он

Код:
 
 preg_match_all('#<a href="(.*)"><img src="http://s.site.ru/i/m.png" alt="M"></a><a href="/file/(.[0-9]*)/(.*)">(.*)</a>(.*)<td align="right">([0-9]*..?[0-9]+.?)&nbsp;(.[A-Z]*)</td><td align="center"><span class="green"><img src="http://s.site.ru/t/arrowup.gif" alt="S" />&nbsp;(.[0-9]*)</span>&nbsp;<img src="http://s.site.ru/t/arrowdown.gif" alt="L" /><span class="red">&nbsp;(.[0-9]*)</span>#Uis', $result, $find);
   

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 00:15 01-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578

Цитата:
$result

о содержимом мы сами догадаемся?
какой смысл в регулярке, если не видно с чем работа идет?

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:20 01-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
это результат парсинга curl  $result = curl_exec($curl);
там вся страница сайта

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 02:19 01-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578

Цитата:
это результат парсинга curl  

ну и почему нам от этого должно легче стать ?)
не видя к чему применяется регулярка, нельзя сказать в чем возникает проблема.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:28 01-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот весь код, разбирайтесь сами =)
Читать дальше..

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 03:06 01-02-2014 | Исправлено: maxus5578, 03:09 01-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
да елки палки.. вы думаете хоть немного?  
зачем нам ваш код - к какому тексту вы применяете регулярное выражение?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:20 01-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
обычный html с другого сайта

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 03:28 01-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578

Цитата:
обычный html с другого сайта

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:30 01-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
да я и вожусь, вы можете сказать я хоть правильно делаю, или вообще нужно по другому?

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 03:32 01-02-2014 | Исправлено: maxus5578, 03:33 01-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578

Цитата:
вы можете сказать я хоть правильно делаю

без содержимого переменной $result - нет

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:35 01-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$result это просто страница, я проверял через var_dump и echo и выводит страницу с того сайта.
Я пробовал вытащить просто ссылки со страницы  
preg_match_all('#<a href="(.*)"><img src="http://s.site.ru/i/m.png" alt="M"></a>#Uis', $result, $find);  
и все работало, но когда я хочу вырезать не только ссылку, он нечего не находит.
Экранировать точно не нужно?
И последний вопрос. Можно ли использовать пример 5 вызовов preg_match_all, и получится ли быть массивом $find[1] $find[2] $find[3] и тд, т.к у меня не хочет искать по другому.

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 03:57 01-02-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru