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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Canonier
\s+хер\s+
Это PCRE..
 
Добавлено:
хотя да, /\sхер\s/ тоже попадет
 
Добавлено:
Rendom

Код:
 
$pattern = '%(<ta.+?)(<ta.+?</table>)(.+?)%s';
$new_text = preg_replace($pattern, '$1$3', $text);
 

Може чего-то не доглядел, у меня вроде заработало так как надо.

Всего записей: 39 | Зарегистр. 30-12-2008 | Отправлено: 19:55 25-01-2011 | Исправлено: hunter29, 23:20 25-01-2011
Xant1k



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

Всего записей: 2918 | Зарегистр. 20-02-2009 | Отправлено: 20:20 31-01-2011 | Исправлено: Xant1k, 11:29 23-10-2013
chereshov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте,
Нужна Ваша помощь.
$source[] = 'http://www.google.com/search?num=30&q=$query+$query2&start=0&sa=N';
//Ссылка с google
preg_match_all('@class="?r"?>.+?href="(.+?)".*?>(.+?)<\/a>.+?class="?s"?>@m',$gget,$matches,PREG_SET_ORDER);
 
Ссылки с google с 20-23 января получаются вот такими:
http://www.zinruss.com/themes/&sa=U&ei=7zxQTeaKNMOWOoDmrBU&ved=0CDUQFjAP&usg=AFQjCNE0JmbpeOq5XaYRVpppCU9ScqpQ8w
http://www.link4file.com/dl/&sa=U&ei=8DxQTa2kIsOcOvT08NIP&ved=0CDoQFjAS&usg=AFQjCNEnuSOefEs4K5g5M2_TiQabOALFgA
 
Помогите убрать ненужный кусок с ссылки

Всего записей: 1 | Зарегистр. 07-02-2011 | Отправлено: 21:55 07-02-2011
neznayka3

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

Код:
$row = '<tr id="sfsaffdgh" class="gridRow" valign="top">';
$pattern = '|<tr\s+id=\"(.*)\"\s+class=\"gridRow\"\s+valign=\"top\">|';
preg_match_all($pattern, $row, $matches);
 
echo '<pre>';
print_r($matches);
echo '</pre>';
так паттерн работает, когда подставлю полный html не работает:
Код:
preg_match_all($pattern, $html, $matches);
модификаторы нужны?

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 23:43 14-02-2011
Cheery



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

Цитата:
модификаторы нужны?

U добавьте
или запишите как .*?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:46 14-02-2011
F777



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как написать регулярное выражение, соответствующее шаблону $любая-последовательность-символов$ ???
 
Вариант /\$.*\$/ почему-то не срабатывает...

Всего записей: 2183 | Зарегистр. 23-02-2004 | Отправлено: 23:59 14-02-2011
Cheery



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

Цитата:
Вариант /\$.*\$/ почему-то не срабатывает...

работает, покажите пример, на котором тестируете.. и прочитайте мой ответ выше - тоже имеет некоторое отношение.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:07 15-02-2011
F777



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
echo ''.ereg_replace("/\$.*\$/", "x", "123$4$5$678$90").' <br>';
echo ''.preg_replace("/\$.*\$/", "x", "123$4$5$678$90").' <br>';
 
Результат:
 
123$4$5$678$90  
123$4$5$678$90x
 
А хочется:
 
123x5x90
123x5x90
 
Что здесь неправильно сделано?
 

Всего записей: 2183 | Зарегистр. 23-02-2004 | Отправлено: 00:16 15-02-2011
Cheery



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

Цитата:
Что здесь неправильно сделано?  

одинарные кавычки используйте
echo ''.preg_replace('/\$.*?\$/', "x", '123$4$5$678$90').' <br>';  

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:28 15-02-2011
F777



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
Спасибо. $, который Вы добавили, еще, оказывается, важен.

Всего записей: 2183 | Зарегистр. 23-02-2004 | Отправлено: 00:53 15-02-2011
Cheery



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

Цитата:
$, который Вы добавили, еще, оказывается, важен

я добавил "?"  
сказал же - читайте выше.. нужно "отучать от жадности" выражения

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:55 15-02-2011
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
del
 
Добавлено:
надо выташить из атрибута value его значение, если известен другой атрибут и его значение

Код:
function get_value($attr, $value, $html)
{
    $pattern = "|<input\s*[^>]*\s*value=\"(.*)\"\s*" . $attr . "\s*=\s*\"" . $value . "\"[^>]*>|U";
 
    preg_match_all($pattern, $html, $matches);
 
    echo '<pre>';
    print_r($matches);
    echo '</pre>';
}
там еще куча атрибутов, среди них обработчики. в названиях встречается знак $

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 17:12 15-02-2011 | Исправлено: neznayka3, 18:15 15-02-2011
Cheery



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

Цитата:
надо выташить из атрибута value его значение, если известен другой атрибут и его значение

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

Цитата:
. $attr .

не забываем про www.php.net/preg_quote

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:13 15-02-2011
neznayka3

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

Код:
$pattern='|<select\s*[^>]*id=\"zxc\"[^>]*>|U';  
этот выводит только первый тег с кучей атрибутов.

Код:
$pattern='|<select\s*[^>]*id=\"zxc\"[^>]*>(.*)<\/select>|U';
этот вообще ничего не выводит. где ошибка?

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 00:19 18-02-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
neznayka3
код формы показывайте тоже.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:35 18-02-2011
neznayka3

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

Код:
<html><head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1251">
    </head>
    <body class="UnmarginedBody">
        <form name="form1" method="post" action="EditLoad.aspx?ID=123&amp;Action=Edit" onsubmit="javascript:return WebForm_OnSubmit();" id="form1">
            <select name="zcx" id="zxc" onchange="ddlType_SelectedIndexChanged(this)" onclick="ddlType_SelectedIndexChanged(this)" style="width: 232px;">
                <option value="0"></option>
                <option value="1">Автошины</option>
                <option value="2">Алкогольные напитки</option>
            </select>
        </form>
    </body>
</html>

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 07:57 18-02-2011
Cheery



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

Цитата:
$pattern='|<select\s*[^>]*id=\"zxc\"[^>]*>(.*)<\/select>|Us';

иначе точка не включает в себя перенос строки

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:08 18-02-2011 | Исправлено: Cheery, 11:09 18-02-2011
neznayka3

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

Код:
        <form>
            <input value="1" id="clb_1" type="checkbox">
            <input value="2" id="clb_2" type="checkbox" checked>
            <input value="3" id="clb_3" type="checkbox">
            <input value="4" id="clb_4" type="checkbox" checked>
        </form>
подскажите, как вытащить все с checked
Код:
$pattern = '|<input\s*value=\"(\d+)\"[^>]*checked>|U';
тащит только первое

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 11:17 25-02-2011
Cheery



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

Код:
<?php
  $data=<<<data
        <form>  
            <input value="1" id="clb_1" type="checkbox">  
            <input value="2" id="clb_2" type="checkbox" checked>  
            <input value="3" id="clb_3" type="checkbox">  
            <input value="4" id="clb_4" type="checkbox" checked>  
        </form>
data;
preg_match_all('|<input\s*value=\"(\d+)\"[^>]*checked>|U',$data,$matches);
print_r($matches);
?>


Цитата:
Array
(
    [0] => Array
        (
            [0] => <input value="2" id="clb_2" type="checkbox" checked>
            [1] => <input value="4" id="clb_4" type="checkbox" checked>
        )
 
    [1] => Array
        (
            [0] => 2
            [1] => 4
        )
 
)


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:28 25-02-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет. Помогите очистить таблицы от мусора.
 
В итоге должны остаться только стандартные тэги table, tbody, tr, th, td, параметры colspan, rowspan и содержание ячеек.
Мусора в таблице огромная куча - http://zalil.ru/30894321
 
Добавлено:
Иными словами.  
Из такого кода

Код:
<table width="861" cellspacing="0" cellpadding="0" border="0" style="border-collapse:
 collapse;table-layout:fixed;width:646pt" x:str="">
 <colgroup><col width="64" style="width:48pt">
 <col width="72" style="mso-width-source:userset;mso-width-alt:2560;width:54pt">
 <col width="101" style="mso-width-source:userset;mso-width-alt:3584;width:76pt">
 <col width="64" span="4" style="width:48pt">
 <col width="80" style="mso-width-source:userset;mso-width-alt:2844;width:60pt">
 <col width="64" style="width:48pt">
 <col width="80" style="mso-width-source:userset;mso-width-alt:2844;width:60pt">
 <col width="72" span="2" style="mso-width-source:userset;mso-width-alt:2560;
 width:54pt">
 </colgroup><tbody><tr height="27" style="height:20.4pt">
  <td width="64" height="27" style="height:20.4pt;width:48pt" class="xl6410339"></td>
  <td width="72" style="width:54pt" class="xl6510339"></td>
  <td width="653" x:str="Газобетонные блоки " style="width:490pt" class="xl9210339" colspan="9">Газобетонные блоки<span style="mso-spacerun:yes">&nbsp;</span></td>
  <td width="72" style="width:54pt" class="xl6410339"></td>
 </tr>
 <tr height="21" style="height:15.6pt">
  <td height="21" style="height:15.6pt" class="xl6410339"></td>
  <td class="xl6510339"></td>
  <td width="653" x:str="(блоки&nbsp;ячеистого бетона автоклавного твердения)  " style="width:490pt" class="xl6610339" colspan="9">(блоки&nbsp;ячеистого
  бетона автоклавного твердения)<span style="mso-spacerun:yes">&nbsp;&nbsp;</span></td>
  <td class="xl6410339"></td>
 </tr>
</tbody></table>

 
надо получить:

Код:
<table>
 <tbody><tr>
  <td></td>
  <td></td>
  <td colspan="9">Газобетонные блоки<span style="mso-spacerun:yes">&nbsp;</span></td>
  <td ></td>
 </tr>
 <tr>
  <td></td>
  <td></td>
  <td colspan="9">(блоки&nbsp;ячеистого бетона автоклавного твердения)<span style="mso-spacerun:yes">&nbsp;&nbsp;</span></td>
  <td></td>
 </tr>
</tbody></table>

 
Полный пример по вышеупомянутой ссылке

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 23:33 19-04-2011
Открыть новую тему     Написать ответ в эту тему

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