Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: hunter29
Дата сообщения: 25.01.2011 18:55
Canonier
\s+хер\s+
Это PCRE..

Добавлено:
хотя да, /\sхер\s/ тоже попадет

Добавлено:
Rendom

Код:
$pattern = '%(<ta.+?)(<ta.+?</table>)(.+?)%s';
$new_text = preg_replace($pattern, '$1$3', $text);
Автор: chereshov
Дата сообщения: 07.02.2011 20:55
Здравствуйте,
Нужна Ваша помощь.
$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

Помогите убрать ненужный кусок с ссылки
Автор: neznayka3
Дата сообщения: 14.02.2011 22:43

Код: $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>';
Автор: Cheery
Дата сообщения: 14.02.2011 22:46
neznayka3

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

U добавьте
или запишите как .*?
Автор: F777
Дата сообщения: 14.02.2011 22:59
Подскажите, пожалуйста, как написать регулярное выражение, соответствующее шаблону $любая-последовательность-символов$ ???

Вариант /\$.*\$/ почему-то не срабатывает...
Автор: Cheery
Дата сообщения: 14.02.2011 23:07
F777

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

работает, покажите пример, на котором тестируете.. и прочитайте мой ответ выше - тоже имеет некоторое отношение.
Автор: F777
Дата сообщения: 14.02.2011 23:16
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

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

Автор: Cheery
Дата сообщения: 14.02.2011 23:28
F777

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

одинарные кавычки используйте
echo ''.preg_replace('/\$.*?\$/', "x", '123$4$5$678$90').' <br>';
Автор: F777
Дата сообщения: 14.02.2011 23:53
Cheery

Спасибо. $, который Вы добавили, еще, оказывается, важен.
Автор: Cheery
Дата сообщения: 14.02.2011 23:55
F777

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

я добавил "?"
сказал же - читайте выше.. нужно "отучать от жадности" выражения
Автор: neznayka3
Дата сообщения: 15.02.2011 16:12
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>';
}
Автор: Cheery
Дата сообщения: 15.02.2011 21:13
neznayka3

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

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

Цитата:
. $attr .

не забываем про www.php.net/preg_quote
Автор: neznayka3
Дата сообщения: 17.02.2011 23:19
на форме куча select-ов.

Код: $pattern='|<select\s*[^>]*id=\"zxc\"[^>]*>|U';
Автор: Cheery
Дата сообщения: 17.02.2011 23:35
neznayka3
код формы показывайте тоже.
Автор: neznayka3
Дата сообщения: 18.02.2011 06:57
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>
Автор: Cheery
Дата сообщения: 18.02.2011 10:08
neznayka3

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

иначе точка не включает в себя перенос строки
Автор: neznayka3
Дата сообщения: 25.02.2011 10:17

Код: <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>
Автор: Cheery
Дата сообщения: 25.02.2011 18:28
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);
?>
Автор: ra1n
Дата сообщения: 19.04.2011 22:33
Всем привет. Помогите очистить таблицы от мусора.

В итоге должны остаться только стандартные тэги 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>
Автор: Cheery
Дата сообщения: 22.04.2011 07:43
ra1n
Никто вам так и не написал.. в общем вот, набросал по кускам, чтобы было понятнее и это не самый лучший вариант, конечно же, но работает

Код: $table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!colspan).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+(colspan=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);
Автор: ra1n
Дата сообщения: 22.04.2011 10:05
Спасибо большое.
Теперь вопрос - как это использовать? Каким образом воспользоваться.
Автор: Cheery
Дата сообщения: 22.04.2011 10:06
ra1n

Цитата:
Теперь вопрос - как это использовать? Каким образом воспользоваться.

код в переменной $table
на выходе, после выполнения всех регулярок, получится то, что и просили
Автор: ra1n
Дата сообщения: 22.04.2011 10:14
Так?


Код: <?php
$table = 'весь код тут';

$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!colspan).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+(colspan=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);
?>
Автор: Cheery
Дата сообщения: 22.04.2011 10:16
ra1n
да хотя бы так.. но $table после всех регулярок то использовать где то надо.
и хоть в include - откуда я знаю как у вас там все..
Автор: ra1n
Дата сообщения: 22.04.2011 10:25

Код: <?php
$table = '123';

$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!colspan).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+(colspan=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);

echo "$table";

?>
Автор: Cheery
Дата сообщения: 22.04.2011 10:25

Цитата:
Как вместо 123 использовать include 'source.txt'

www.php.net/get_file_contents
Автор: ra1n
Дата сообщения: 22.04.2011 10:32
Здорово, работает!
Самое огромное спасибо Cheery


Код: $table = file_get_contents('source.txt');
Автор: Cheery
Дата сообщения: 22.04.2011 10:42
ra1n

Цитата:
попробовал добавить рег. выражений, не получилось

в примере не было, вот и не написал.
ну просто же
везде,где упомянул colspan сделать
(colspan|rowspan)
должно сработать
Автор: ra1n
Дата сообщения: 22.04.2011 10:52

Код: <?php
$table = file_get_contents('source.txt');

$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!(colspan|rowspan)).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+((colspan|rowspan)=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);

echo "$table";

?>
Автор: ra1n
Дата сообщения: 22.04.2011 20:48
Cheery
с последней неприятность можно справиться? такая замечательная штука получилось и чуть-чуть не хватает до работоспособного варианта

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.