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

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



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

Код:
$_POST["depiction"] = preg_replace("#\[(sb|su|si|ss)\](.*)\[/\\1\]#iU", "<$1>$2</$1>", $_POST["depiction"]);

 
если вводить текст, вида [sb]OK![/sb] его преобразует в <sb>OK!</sb>
но проблема в том, что если написать: [sb][su]OK![/su][/sb] после преобразования получится: <sb>[su]OK![/su]</sb>
т.е. не преобразовывает текст, который в нутри тега, который уже преобразовывает.
 
вот к примеру:

Код:
<?php
$text = "[sb][su][si]OK![/si][/su][/sb]... [sb][su]Delete![/su][/sb]";
$text = preg_replace("#\[(sb|su|si|ss)\](.*)\[/\\1\]#iU", "<$1>$2</$1>", $text);
 
echo $text;
?>

 
в HTML получается:

Код:
<sb>[su][si]OK![/si][/su]</sb>... <sb>[su]Delete![/su]</sb>

 
а должно быть:

Код:
<sb><su><si>OK!</si></su></sb>... <sb><su>Delete!</su></sb>


Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 13:21 28-10-2012 | Исправлено: Sutar, 13:23 28-10-2012
Sutar



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

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



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

Цитата:
в чем проблема

в том, что в данном случае регулярки не работают рекурсивно и захватывают первый попавшийся паттерн
 

Код:
$text = "[sb][su][si]OK![/si][/su][/sb]... [sb][su]Delete![/su][/sb]";  
$text = preg_replace_callback("#\[(sb|su|si|ss)\](.*)\[/\\1\]#iU", 'replace_tags', $text);  
 
echo $text;  
 
function replace_tags($matches)
{
    $text = '<' . $matches[1] . '>' . preg_replace_callback("#\[(sb|su|si|ss)\](.*)\[/\\1\]#iU", 'replace_tags', $matches[2]) . '</' . $matches[1] . '>';  
    return $text;
}

 
результат

Цитата:
<sb><su><si>OK!</si></su></sb>... <sb><su>Delete!</su></sb>


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:00 01-11-2012 | Исправлено: Cheery, 01:09 01-11-2012
Sutar



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

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



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

Цитата:
Но а с помощью регулярных выражений нельзя такого сделать?

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

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

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
таим скриптом пользуются все движки сайтов?)

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



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

Цитата:
таим скриптом пользуются все движки сайтов?)

возьмите любой и посмотрите код.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:26 08-11-2012
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите составить регулярное выражение, нужно из всего ХТМЛ вырвать таблицу

Код:
<table id="course-table-pb">
                <tbody>
                <tr>
                    <th width="24%">Валюта:</th>
                    <th width="40%" style="text-align:right;">покупка</th>
                    <th width="36%" style="text-align:right;">продажа</th>
                </tr>
                <tr>
                    <td width="26%">EUR</td>
                    <td width="9%" style="text-align:right;">10.34</td>
                    <td width="25%" style="text-align:right;">10.64</td>
                </tr>
                <tr>
                    <td width="26%">USD</td>
                    <td width="9%" style="text-align:right;">8.180</td>
                    <td width="25%" style="text-align:right;">8.220</td>
                </tr>
                <tr>
                    <td width="26%">RUB</td>
                    <td width="9%" style="text-align:right;">0.255</td>
                    <td width="25%" style="text-align:right;">0.265</td>
                </tr>
            </table>

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 19:04 09-11-2012
Cheery



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

Цитата:
Помогите составить регулярное выражение, нужно из всего ХТМЛ вырвать таблицу  

могли бы просмотреть тему.. вопрос настолько очевидный, что и задавать его после просмотра не нужно было бы. если, конечно, вы хотите чему то научиться, а не получить это на блюдечке
 
#<table.*id="course-table-pb">.*</table>#isU

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

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



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

Цитата:
таим скриптом пользуются все движки сайтов?)

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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:21 14-11-2012
daniilino



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго времени суток. Понадобилось проверить строку на отсутствие символов кроме заданного набора в PHP. Например, есть переменная $login, которая может содержать только [A-Z],[a-z],[0-9],"-" и "_". Как проверить строку на отутствие любых символов кроме этих? Как должна выглядеть такая функция? Просто не могу чётко сформулировать для поисковика.  
Заранее благодарен.

Всего записей: 41 | Зарегистр. 20-04-2012 | Отправлено: 12:05 02-12-2012
Wahnsinn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
daniilino
if(!preg_match("/^[a-zA-Z0-9-_]{1,}$/u",$login)){
echo "no";  
}

Всего записей: 129 | Зарегистр. 20-01-2007 | Отправлено: 03:21 03-12-2012
daniilino



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wahnsinn
Спасибо, именно то, что нужно было!

Всего записей: 41 | Зарегистр. 20-04-2012 | Отправлено: 00:27 05-12-2012
Xant1k



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подсобите с выражением. Пытаюсь через Yahoo Pipes прогнать RSS ленту содержащую:
 
1.
(Classic Rock, Hard Rock, Southern Rock) Les Dudek - Ghost Town Parade & Gypsy Ride - 1978, 1981, FLAC (tracks+.cue), lossless [497 MB]
или
[Обновлено] (Blues, Blues-Rock, Folk-Rock) Mark Knopfler - Официальная дискография (7 альбомов, 6 промо, 7 синглов, 2 EP, 1 ECD / 27 изданий) - 1996-2012, FLAC (image+.cue, tracks+.cue), lossless [6.06 GB]
или
(Southern Rock) Outlaws - Los Hombres Malo - 1982, APE (image+.cue), lossless [383 MB]
 
Требуется оставлять только середину (название исполнителя и альбома). Пока нашел способ убрать "lossless" через
[^\s]*lossless[^\s]*
 
 
2.
Привести ленту вида (Southern Rock) Outlaws - Los Hombres Malo - 1982, APE (image+.cue), lossless [383 MB] к
 
Outlaws - Los Hombres Malo
 
(Southern Rock)
APE (image+.cue)
если возможно. Главное вынести отдельной строкой название исполнителя/группы и альбома.
 
3.
Есть готовый вариант фильтра который из множества новостей отбирает содержащие только 2011 и 2010г.
.*(2010|2011).*track\+.cue.*?
Или так.. Зависит от реализации парсера:
.*(2010|2011).*track\+\.cue.*?
 
Требуется добавить к правилу что бы новости содержащие, например Collection, Дискография, Discography, и прочие добавляемые по желанию, не попадали в фильтр.
 
Ссылка на ленту если что http://feed.rutracker.org/atom/f/1702.atom
 
А вообще есть в паутине какой-нибудь софт с информативными подсказками, может готовыми примерами(исключающие из текста определенные слова, цифры, или фразы). Не очень то и получается вникнуть в теорию, понять логику работы

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 12:00 12-12-2012
neznayka3

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

Цитата:
А вообще есть в паутине какой-нибудь софт с информативными подсказками

есть

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 12:50 12-12-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне нужно узнать, какой формат используется в название.
Например, есть название name.pro.stop.exe мне нужно получить .exe формат.
 
Вот код, только он что-то не совсем правильно работает:
 

Код:
<?php
$d = "name.pro.stop.exe";
echo preg_replace("#(.*)(jpg|jpeg|png|rar|exe)#iU", ".$2", $d);
?>

 
И как можно сделать проверку, чтоб формат был (jpg|jpeg|png|rar|exe). если нет, то писало сообщение и т.д.

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



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

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

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Просто мне нужно ещё сделать проверку, чтоб формат файла был точно jpg|jpeg|png если другой, дальнейшие действия не будут делаться.

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



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
так и пишите сразу.. что нужно получить расширение файла.
 
зачем вам для этого replace??  
www.php.net/preg_match
 
#\.(jpg|jpeg|png)$#i

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

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



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну мне нужно получить и проверить, чтоб название файла содержало jpg|jpeg|png.
проверку сделал. а как теперь получить формат файла??

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 01:41 14-12-2012
Открыть новую тему     Написать ответ в эту тему

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