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

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



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

Код:
 
preg_match("'^(.+) \((.+)\)$'", "Мой любимый принтер (canon) (цвет черный)", $match_arr)
 

$match[1] = Мой любимый принтер (canon)
$match[2] = цвет черный

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 14:13 12-10-2016
olegpronin



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitus_Bering
спасибо, а если так:
Мой любимый принтер (canon) (цвет (черный))
 
надо получить:  
$match[1] = Мой любимый принтер (canon)  
$match[2] = цвет (черный)

Всего записей: 5365 | Зарегистр. 31-01-2007 | Отправлено: 17:40 12-10-2016 | Исправлено: olegpronin, 17:40 12-10-2016
Vitus_Bering



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

Код:
 
preg_match("'^(.+\)) \((.+)\)$'", "Мой любимый принтер (canon) (цвет (черный))", $match_arr)
 

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 18:18 12-10-2016
olegpronin



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitus_Bering
последний раз потревожу... Нужен более универсальный вариант.
1. Мой любимый принтер (canon) (цвет (черный))  
$match[1] = Мой любимый принтер (canon)  
$match[2] = цвет (черный)
 
2. Мой любимый принтер canon (цвет (черный))  
$match[1] = Мой любимый принтер canon
$match[2] = цвет (черный)
 
3. Мой любимый принтер (canon) (цвет черный)  
$match[1] = Мой любимый принтер (canon)  
$match[2] = цвет черный
 
возможно ли все эти варианты под одну регулярку засунуть?
То есть ищем только скобки по последней закрывающейся скобке ) её вхождение, остальные скобки не трогаем.

Всего записей: 5365 | Зарегистр. 31-01-2007 | Отправлено: 20:09 12-10-2016 | Исправлено: olegpronin, 21:20 12-10-2016
Vitus_Bering



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

Код:
 
preg_match("'^((.+\))|(.+?)) \((.+)\)$'", $s, $match)
 
$match[1] = Мой любимый принтер (canon)    
$match[4] = цвет (черный)  
 
$match[1] = Мой любимый принтер canon  
$match[4] = цвет (черный)  
   
$match[1] = Мой любимый принтер (canon)    
$match[4] = цвет черный
 
 

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 21:29 12-10-2016 | Исправлено: Vitus_Bering, 21:32 12-10-2016
olegpronin



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitus_Bering
огроменное спасибо, всё работает.

Всего записей: 5365 | Зарегистр. 31-01-2007 | Отправлено: 21:44 12-10-2016
Sutar



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

Код:
$LReplace = "/[A-z0-9-]/";
$badurl = preg_replace($LReplace, "", $_POST["url"]);

 
Суть простая: он возвращает в $badurl ВСЕ символы, кроме: A-z, 0-9 и символа -
Но тут проблема: он не возвращает символ _
Более простым языком, если передать в $_POST["url"] значение "this-url_2", скрипт не возвращает  знак "_". Как исправить?)

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 23:56 23-11-2016
Mavrikii

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

Код:
$LReplace = "/[A-Z0-9-]/i";

Всего записей: 15594 | Зарегистр. 20-09-2014 | Отправлено: 00:05 24-11-2016
Sutar



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

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 00:07 24-11-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В редакторе Sublime Text есть возможность поиска и замены по регулярным выражениям.
Появилась необходимость, чтобы найти ряд букв и заменить их на другие.
 
Например письмо:
 

Код:
Травка зеленеет, солнышко блестит, ласточка с весною, в сени к нам летит.

 
В нем надо все встречающиеся буквы "а", заменить на "о", а "е", заменить на "и".
 
Это возможно сделать в Sublime Text?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 21:45 24-11-2016 | Исправлено: erroraccount, 22:00 24-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
Название темы и раздела прочитайте. Вам сюда - Sublime Text

Всего записей: 15594 | Зарегистр. 20-09-2014 | Отправлено: 21:47 24-11-2016
erroraccount

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

Цитата:
Название темы и раздела прочитайте. Вам сюда - Sublime Text [?]

Спасибо. Но я надеялся на продолжение банкета ))) Думал, если невозможно, то покажут, как на пхп сделать. ))

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:01 24-11-2016
Mavrikii

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

Цитата:
надеялся на продолжение банкета  

Банкет по поводу той программы там
 

Цитата:
покажут, как на пхп сделать.

http://php.net/manual/ru/function.strtr.php
или
http://php.net/manual/ru/function.str-ireplace.php

Всего записей: 15594 | Зарегистр. 20-09-2014 | Отправлено: 22:15 24-11-2016 | Исправлено: Mavrikii, 22:16 24-11-2016
Tarasyan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как взять в  тег <i> содержимое между "*"  
 
К примеру есть текст
 

Код:
 
*тут начало текста*
далее идет продолжение  
 

результат должен получиться  
 

Код:
 
*<i>тут начало текста</i>*
далее идет продолжение  

Всего записей: 274 | Зарегистр. 27-11-2004 | Отправлено: 01:35 25-11-2016
Mavrikii

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

Цитата:
Подскажите как взять в  тег <i> содержимое между "*"


Код:
$str = preg_replace('/\*(.*)\*/U', '*<i>$1</i>*', $str);

Всего записей: 15594 | Зарегистр. 20-09-2014 | Отправлено: 04:00 25-11-2016
Tarasyan



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

Всего записей: 274 | Зарегистр. 27-11-2004 | Отправлено: 08:01 25-11-2016
Tarasyan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Снова нужна помощь )))
 
Нужно найти первое по тексту  сообщение, которое лежит между "*" и "*", и если есть перенос строки, убрать его  и весь текст, что между первыми "*" обрамить в тег <i> (как в решении выше, только убрать перенос строки нужно.)  
Остальные звездочки что по тексту пропускать
 
исходный  

Код:
*тут начало  
текста*  
далее идет продолжение  
*снова продолжение*
идет далее текст

 
что бы получилось  

Код:
*<i>тут начало текста</i>*  
далее идет продолжение  
*снова продолжение*
идет далее текст

 
 
в принципе массив с переносами вроде есть, но не могу применить правильно
 

Код:
array("\r\n", "\r", "\n")

 
Добавлено:
Вроде нашел решение
 
$str = str_replace(array("\r\n", "\r", "\n"), ' ',  strip_tags($str));
$str = preg_replace('/\*(.*)\*/U', '*<i>$1</i>*<br>', $str);
 
но как это применить только к первым "*"и "*". Если по тексту еще есть *, то и к ним применяется все.

Всего записей: 274 | Зарегистр. 27-11-2004 | Отправлено: 19:40 26-11-2016 | Исправлено: Tarasyan, 20:40 26-11-2016
Mavrikii

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

Код:
$str = preg_replace_callback('/\*(.*)\*/Us', function($m) {
    return '*<i>' . preg_replace('/[\r\n]/', '', $m[1]) . '</i>*';
}, $str, 1);

да, раз есть переносы, то нужен модификатор s, иначе точка их не захватит
 
если хотите использовать свой preg_replace, то у функции есть четвертый аргумент, количество замен
http://php.net/manual/ru/function.preg-replace.php

Всего записей: 15594 | Зарегистр. 20-09-2014 | Отправлено: 05:56 28-11-2016 | Исправлено: Mavrikii, 05:57 28-11-2016
Tarasyan



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Уже решил. Спасибо.

Всего записей: 274 | Зарегистр. 27-11-2004 | Отправлено: 01:23 29-11-2016
xerpal



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

Всего записей: 1633 | Зарегистр. 08-10-2011 | Отправлено: 08:38 09-03-2017 | Исправлено: xerpal, 09:49 09-03-2017
Открыть новую тему     Написать ответ в эту тему

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