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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, помогите пожалуйста с решением задачи.
Нужно с помощю PCRE вывести первых 3 параграфа, из 5 имеющихся.
Как выводить все 5 параграфов разобрался, а с выводом 3 из 5 нет

Всего записей: 1 | Зарегистр. 02-12-2009 | Отправлено: 05:18 02-12-2009
SHANDLE

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что то заклинило с регулярными выражениями:
$s ="
begin
Текст, который нужно вырезать  
end
Произвольный текст, содержащий end
";
 
preg_repalce('/begin([\w]+)end/', ' ', $s);
вырезает от begin до end, который в произвольном тексте.
Как сделать, чтобы он вырезал только до первого встречного end?
 
 
Добавлено:
Все, разобрался.  
Дело в "жадном" и "ленивом" поиске, "жадный" - поиск строки максимальной длины, "ленивый" - минимальной длины
 
preg_repalce('/begin([\w]+?)end/', ' ', $s);
Вот так будет "ленивый" поиск, и вырежет только то что нужно.
 
А вот для задачки из шапки (первого поста):
preg_replace('/<table>([\w\W]*?)<\/table>/', '&nbsp;', $s);

Всего записей: 928 | Зарегистр. 19-01-2007 | Отправлено: 09:02 03-12-2009 | Исправлено: SHANDLE, 09:16 03-12-2009
Alex_Smok

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот полезная информация по PHP
http://computer.***.net/help_book/3/index.html




Не нужно флудить и заниматься рекламой /Cheery/

Всего записей: 9 | Зарегистр. 08-12-2009 | Отправлено: 19:40 08-12-2009 | Исправлено: Cheery, 20:14 08-12-2009
Xriby



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

Код:
function get_table_by_class($url, $class_name)
{
    $html = file_get_contents($url);
    $re = '{
     <table[^>]+\bclass\s*=\s*[\'"]?' . $class_name . '\b["\']?[^>]*>
    (?:
      [^<]++|
      (
        <table[^>]*>
        (?:
          [^<]++|
          (?1)|
          .
        )*?
        </table>  
      )|
      .  
    )*?
    </table\s*>
    }xs';  
    preg_match($re, $html, $m);  
    $text = $m[1];
    $text = preg_replace('{<img[^>]*>}', '', $text);
    $text = preg_replace('{<a[^>]*>}', '', $text);
    $text = preg_replace('{</a[^>]*>}', '', $text);
    return $text;
}

 
Эта функция должна выдирать из $html
таблицу с классом $class_name, но не работает.
Помогите разобраться.
В таблице могут быть вложения других таблиц.
 

Всего записей: 47 | Зарегистр. 05-02-2007 | Отправлено: 10:35 09-12-2009
alexbel31

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такое код:  
 
if (!preg_match("/^[a-zа-я]{2,20}$/i",$name))  
    {  
        $success = false;  
        $error .= "Некорректно введено имя!<br/> \n\r";  
    }  
т.е. переменная name должна состоять из англ. или русских букв. Как сделать чтобы success был true, если переменная name соответствует шаблону /^[a-zа-я]{2,20}$/i или поле пустое.  
Я в php новичек, прошу помощи у гуру

Всего записей: 32 | Зарегистр. 23-01-2009 | Отправлено: 23:54 09-01-2010
andead



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

Код:
$success = ($name == '' || preg_match("/^[a-zа-я]{2,20}$/i",$name));


----------
мой блог

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 00:07 10-01-2010
alexbel31

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

Код:
if ($name == '' || preg_match("/^[a-zа-я]{2,20}$/i",$name))
             {
                
            } else {
                $success = false;
                $error .= "<font color=\"red\">Некорректно введено имя!</font><br/> \n\r";                
            }
 
 


Всего записей: 32 | Зарегистр. 23-01-2009 | Отправлено: 00:24 10-01-2010
muk as

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется текстовый документ с одной строкой вида
192.168.0.1 192.168.0.5 ... 192.168.x.y
таких ip адресов может быть от 0 до нескольких сотен
необходимо первому в строке ип адресу присвоить $ip[0][0], второму - $ip[0][1] и так далее
не могу никак составить регулярное выражение для функции preg_match_all.

Всего записей: 443 | Зарегистр. 30-10-2009 | Отправлено: 06:25 26-01-2010 | Исправлено: muk as, 06:26 26-01-2010
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
muk as
разбейте по пробелу в массив, отсортируйте (можно разбив по точкам)  
и все

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:38 26-01-2010
Mira



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

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 22:59 03-02-2010
Cheery



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

Цитата:
хотелось бы что бы все левые урлы предшествуюшие картинке были удалены, за  исключением нескольких сайтов,  
подскажите как это сделать?  

а на примере?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:08 04-02-2010
Mira



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

Код:
фы вафываф ыва фыва [img...]  asdf asdf [img...] [img...] as df as[img...] asd fasdf

 
 
blaksiteX, radikal.ru - названия сайтов , которые надо удалить
whitesiteX - все что надо оставить
 
Добавлено:
надо смотреть в режиме редактирования, а то пхпх бб код не просто вставить на форум.

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 09:49 04-02-2010 | Исправлено: Mira, 09:52 04-02-2010
Sobsoft



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем доброго времени суток!
Подскажите пожалуйста можно ли содержимое файла (см. ниже) привести в табличный вид?

Код:
Название предприятиея М Е Н Ю  на  31.12.09г.
 
Закуски;
Салат из креветок (креветки, икра красная, огурцы, яйцо, сыр, майонез, зелень);100/2/2;47-35;
Салат из кальмаров с сыром (огурцы, рис, яблоки,  майонез, зелень);100/2/2;25-51;
Салат-коктейль "Языковая соломка" (огурцы, яйцо, оливки, майонез, зелень);100/2/2;32-71;
Закуска свекольная с орехом (майонез, зелень);100/2/2;16-82;
Салат из свежей капусты с огурцом (морковь, масло, зелень);100/2/2;13-52;
Яблоки свежие;1 шт.;8-51;
Супы ;
Суп-лапша домашняя, с курицей;45/250/2;23-16;
Молочные блюда;
Каша молочная  пшеничная,  с маслом сливочным;200/15;12-45;
        II блюда;
Рыба жареная по-любительски (филе морского языка);100;33-73;
Язык говяжий отварной;100;57-45;
Мясо, запеченное по-российски (свинина, картофель овощи, сыр, майонез);250;66-32;
Желудки куриные тушеные в сметане;100/75;34-60;
Голубцы с рисом, мясом;216/100/2;40-10;
Голубцы с рисом, мясом, со сметаной;216/100/30/2;44-01;
Мититей;100;33-13;
Соус сметанный с томатом    ;50;6-04;
Сметана;25;3-26;
Масло сливочное;10;2-92   ;
Дополнительные блюда;
Сырники из творога, со сметаной;150/25;46-33;
Сырники из творога, со сгущенным молоком;150/25;46-69;
Сырники из творога, с джемом;150/25;50-71;
Омлет натуральный с сыром;130/5;24-52;
Гарниры;
Картофель, запеченный с зеленью;150/3;12-89;
Гречка отварная с овощами;150;11-72;
Маслины, оливки консервированные;20;12-29;
Огурцы консервированные;35;9-60;
Напитки;
Чай черный "Липтон" ;1 пак.;2-35;
Чай зеленый  с жасмином  "Ахмад" ;200;1-58;
Кофе б/р  "Суаре";2;5-57;
Сахар;16;1-04;
Лимон ;14;1-47;
Минеральная вода "Окуловская" ключевая, "Семь ручьев" газиров.;0,5;20-25;
Сок "J-7"  вишневый;200;22-88;
Сок "J-7"  томатный;200;18-83;
Сок "J-7"   апельсиновый;200;17-67;
Компот фруктовый;200;7-28;
Хлеб "Столичный";30;1-01;
Хлеб "Пшеничный" ;30;1-13;
;;;

Разделители как видите есть, но я ничего умного не придумал - никак не могу въехать.
я написал примерно такой код

Код:
 
<?php
$arr_files = glob('./menu.html');
$i = 0;
foreach ($arr_files as $filename)
{
    $file_data = file_get_contents($filename);
    $file_data = preg_replace('!;!is','<br>',$file_data);
    if(file_put_contents('menu1.html',$file_data))
    $i++;
}
print 'Изменено '.$i.' сстраниц';
?>
 

У меня получается после каждой ; происходит перенос на следующую строку. А нужно нечно типа

Код:
 
<p>Название предприятиея М Е Н Ю  на  31.12.09г.</p>
<table>
<tr>
<td colspan="3">Закуски</td>
</tr>
<tr>
<td>Салат из креветок (креветки, икра красная, огурцы, яйцо, сыр, майонез, зелень)</td><td>100/2/2</td><td>47-35</td>
</tr>
<tr>
<td>Салат из кальмаров с сыром (огурцы, рис, яблоки,  майонез, зелень)</td><td>100/2/2</td><td>25-51</td>
</tr>
<tr>
<td>Салат-коктейль "Языковая соломка" (огурцы, яйцо, оливки, майонез, зелень)</td><td>100/2/2</td><td>32-71</td>
</tr>
</table>
 

Подскажите - как это можно сделать?

Всего записей: 32 | Зарегистр. 03-01-2010 | Отправлено: 10:44 06-02-2010
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста регулярное выражение что бы можно было использовать только a-z A-Z 0-9. спасибо.

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:03 11-02-2010
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[a-zA-Z0-9]
пожалуйста

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 22:04 11-02-2010
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$pass = "test";
if (preg_match("/a-zA-Z0-9]/",$pass)) {
echo "верно";
}
else {
print "Не верно!";
}
 
Где ошибка у меня?

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:19 11-02-2010
andead



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

----------
мой блог

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 22:25 11-02-2010
Mira



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
их две  
забыли открыть [  и указать кол-во символов например + или *
if (preg_match("/[a-zA-Z0-9]*/",$pass)) {

Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 22:25 11-02-2010
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А мин и макс символов, указать 5.15 в конце?
 
Добавлено:
Что то и русские символы пропускает и все

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 22:27 11-02-2010
Cheery



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

Цитата:
Что то и русские символы пропускает и все

да потому что вы проверяете есть ли обычные символы.. а если они есть, значит сразу true ваша регулярка выдаст
preg_match("/[^a-zA-Z0-9]+/",$pass)
вот эта проверяет есть ли какие то символы помимо перечисленных

Цитата:
А мин и макс символов, указать 5.15 в конце?  

а точнее описать условие тогда?

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

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

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