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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Cheery



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

Цитата:
проверку сделал. а как теперь получить формат файла??

preg_match вернет и расширение


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:49 14-12-2012
Sutar



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

Цитата:
preg_match вернет и расширение

 

Код:
<?php
$a = "lock.pro-img.png";
$b = "start.ico";
$c = "31938417dcale.jpg";
 
if(preg_match("#\.(jpg|jpeg|png)$#i", $a)) {echo "$a - Файл загружен.<br/>";} else {echo "$a - Файл не загружен.<br/>";}
if(preg_match("#\.(jpg|jpeg|png)$#i", $b)) {echo "$b - Файл загружен.<br/>";} else {echo "$b - Файл не загружен.<br/>";}
if(preg_match("#\.(jpg|jpeg|png)$#i", $c)) {echo "$c - Файл загружен.<br/>";} else {echo "$c - Файл не загружен.<br/>";}
 
$c = preg_match("#\.(jpg|jpeg|png)$#i", $c);
echo "<br/>$a<br/>$b<br/>$c";
?>

 
Вот к примеру файл.
Мне нужно получить с $a его формат. (в примере, он .png). Как мне получить его?
Я делал вот так:
 

Код:
$с = preg_replace("#(.*)(jpg|jpeg|png|rar|exe)$#", ".$2", $с);

 
но не уверен что это правильно.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 13:52 14-12-2012
Cheery



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

Цитата:
Как мне получить его?  

вы документацию к функции preg_match читали? посмотрите, что является третьим аргументом функции

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:00 14-12-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
вы документацию к функции preg_match читали? посмотрите, что является третьим аргументом функции

 
 
 
 
 
matches, это то что мне нужно? Каким будет код?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 00:35 15-12-2012
Cheery



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

Цитата:
Каким будет код?

ну там же есть примеры..  ну научитесь же хоть немного самостоятельно работать

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:26 15-12-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Правильно?
 

Код:
$c = "31938417dcale.jpg";
if(preg_match("#\.(jpg|jpeg|png)$#i", $c, $format)) {echo "$c - OK.";} else {echo "$c - Error.";}
 
echo "<br/>". $format[0];

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 16:20 15-12-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как можно сделать регулярную проверку, чтоб текст был от 1 до 30?
 

Код:
$a = "[1][1][1][3][1][3][1][14][10][14][1][1][fd]";
echo preg_replace("#\[([1-30])\]#iU", "<img alt=\"\" src=\"images/smiles/$1.gif\"/>", $a);

 
что-то не получается.
 
нужно чтоб не преобразовывало где в [] <= 0 и > 30

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 19:43 21-12-2012
ubian



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте! Есть код:

Код:
 
http://www.smt.ua/pics/photo/29240_73225.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33608.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_42876.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33609.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_37473.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33610.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_79272.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33611.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_88368.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33612.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_76875.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33613.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_85667.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33614.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>http://www.smt.ua/pics/photo/29240_55000.jpg" rel="photo_grouptop"><img src="http://www.smt.ua/pics/thumb/29240_33615.jpg" width="320" height="239" alt="Ноутбук HP 655 (B6N19EA) + Сумка НР"  /></a></td></tr></table></li>
 

Мне нужно выцепить ссылки. Т.е. мне нужно сделать так:

Код:
 
Array
(
    [0] => http://www.smt.ua/pics/photo/29240_73225.jpg
    [1] => http://www.smt.ua/pics/photo/29240_42876.jpg
    .....
)
 

Использую функцию:

Код:
 
$image_list = preg_split('|".*</li>|si',$image_text);
 

Выдает:

Код:
 
Array
(
    [0] => http://www.smt.ua/pics/photo/29240_73225.jpg
    [1] =>  
)
 

Что я делаю не так?

Всего записей: 623 | Зарегистр. 22-07-2011 | Отправлено: 16:57 22-12-2012
Cheery



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

Цитата:
нужно чтоб не преобразовывало где в [] <= 0 и > 30

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

Цитата:
$image_list = preg_split('|".*</li>|si',$image_text);  

а "жадность"?
 


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:43 23-12-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

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

 
Я делал по началу вот так:
 

Код:
for($i = 1; $i <= 30; $i++)
{
$text = str_replace("[$i]", "<img alt=\"\" src=\"images/smiles/$i.gif\"/>", $text);
}
 

 
Но проще было-бы регуляркой...

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 11:25 24-12-2012 | Исправлено: Sutar, 11:26 24-12-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
еще раз повторю - регулярка не для этого
используйте  
preg_replace_callback для проверки

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:04 24-12-2012
zolotou87

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[more] Со странички я вытакиваю в массив текст между тегами с помощью file_get_contents и preg_match, этот текст состоит из русских, латинских символов и цифр. Проблема в том что русские слова заносятся в массив не в той кодировке.
 
Из строки:

Код:
<title>Русский English </title>

 
таким образом вытаскиваю текст:

Код:
$c = file_get_contents("$url");  
preg_match ("#<title>(.*)<\/title>#U", $c, $array1);  
print_r($array1);

 
получаю результат в виде:

Цитата:
Array ( [0] =>  [1] => РљРЅРёРіР° English )

 
Кодировка страницы от куда вытаскиваю utf-8, а на той что вывожу windows-1251
Попробовал изменить кодировку строки:

Код:
$c = file_get_contents("$url");  
iconv ('utf-8', 'windows-1251', $c);
preg_match ("#<title>(.*)<\/title>#Uis", $c, $array1);  
print_r($array1);

Попрежнему выводит не коректно русские слова.
 
 
Что исправить или добавить что бы русские символы оставались прежними?  
 
Поменял кодировку скрипта на utf-8 и включил подпись unicode(BOM), всё заработало нормально!  
Может кому то ещё и пригодится....

Всего записей: 1 | Зарегистр. 19-01-2013 | Отправлено: 16:41 19-01-2013 | Исправлено: Cheery, 21:59 31-01-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В чем ошибка?
 

Код:
<?php
$d = "n_13";
echo preg_replace("#\n_(0-9)#i", "$1", $d);
?>

 
мне нужно вывести с примера n_13 раздел n и число 13 в разные массивы с помощью регулярки. Как это сделать? В чем ошибка?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 20:59 31-01-2013 | Исправлено: Sutar, 21:00 31-01-2013
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar

Цитата:
В чем ошибка?

в вашем полном непонимании вопроса в одной строке "сто" ошибок.
 

Код:
 
$d = "n_13";
preg_match_all('#([a-zA-Z]+)_(\d+)#', $d, $match, PREG_SET_ORDER);
 
echo "<pre>";
print_r($match);
 
=>
Array
(
    [0] => Array
        (
            [0] => n_13
            [1] => n
            [2] => 13
        )
 
)
 

Всего записей: 2076 | Зарегистр. 08-01-2008 | Отправлено: 21:24 31-01-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
Спасибо огромное.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 01:38 01-02-2013
ubian



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть регулярное выражение:

Код:
 
preg_match_all("'http:\/\/www.smt.ua\/pics\/photo\/.{11}\.jpg'si",$content,$image_list);
 

Должно выдирать картинки типа:

Код:
 
http://smt.ua/pics/photo/29178_61689.jpg
 

С страниц типа этой. (я загружаю их содержимое). Проблема в том, что после выполнения скрипта $image_list - пустой массив. $content гарантированно содержит адреса картинок. Что я делаю не так?
Заранее брагодарю

Всего записей: 623 | Зарегистр. 22-07-2011 | Отправлено: 15:10 06-02-2013
Cheery



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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:37 06-02-2013
ubian



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
Спасибо.. Наверное они изменили свой шаблон.... Когда писался скрипт wwww. там был...

Всего записей: 623 | Зарегистр. 22-07-2011 | Отправлено: 16:57 07-02-2013
yakoval

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Нужно из текста  

Код:
 
<div>block text 1</div><b>link</b>
<div>block text 2</div><i>italic</i>
<div>block text 3</div><b>link</b>
 

Получить значения из блоков, после которых идет жирный текст, т.е.

Код:
 
<div>{Этот текст}</div><b>link</b>
 

Мой код:

Код:
 
<?php
  $str = '
<div>block text 1</div><b>link</b>
<div>block text 2</div><i>italic</i>
<div>block text 3</div><b>link</b>
';
 $pattern = '/<div>(?(?!.*?<i>.*?)(.*?))<\/div><b>(.*?)<\/b>/ui';
preg_match_all($pattern, $str, $out);
print_r($out);
 

Выводит

Код:
 
Array
(
    [0] => Array
        (
            [0] => <div>block text 1</div><b>link</b>
            [1] => <div>block text 2</div><b>link</b>
        )
 
    [1] => Array
        (
            [0] => block text 1
            [1] => block text 3
        )
 
    [2] => Array
        (
            [0] => link
            [1] => link
        )
 
)
 

, т.е. то, что нужно!
Но беда - исходный текст не форматирован, имеет вид

Код:
 
<div>block text 1</div><b>link</b><div>block text 2</div><i>italic</i><div>block text 3</div><b>link</b>
 

т.е. без переносов строки. И результат получается такой:

Код:
 
Array
(
    [0] => Array
        (
            [0] => <div>block text 3</div><b>link</b>
        )
 
    [1] => Array
        (
            [0] => block text 3
        )
 
    [2] => Array
        (
            [0] => link
        )
 
)
 
Удаляются эл-ты, после которых встречается <i>.
Как понимаю, разница в переносах строк. Но форматировать исходный текст нельзя. Как сделать, чтобы строка все-таки распарсивалась полностью?

Всего записей: 6 | Зарегистр. 22-02-2013 | Отправлено: 09:06 25-02-2013 | Исправлено: Cheery, 09:10 25-02-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yakoval
/<div>([^<]+)<\/div><b>(.*)<\/b>/Uui

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:21 25-02-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 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