[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_match абзаци
lans8097
В общем есть проблема
Есть хтмл шаблончик такого типа

<form action="" method="get">
<table
class="usersTab" cellpadding="0" cellspacing="0">
<tr>
<th
width="5px"> </th>
<th
width="5px">#</th>
<th>
Логин</th>
<th>
Имя</th>
<th>
почта</th>
<th>
Дата регистрации</th>
<th>
 </th>
</tr>

{cicle}
<tr class="tr">
<td><input
name="" type="checkbox" value=""></td>
<td>
{#}</td>
<td>
{login}</td>
<td>
{password}</td>
<td>
{email}</td>
<td>
{regDate}</td>
<td></td>
</tr>

{/cicle}
</table>
</form>
</td>
</tr>
</table>


И есть регулярка каторая далжна выбрать всё что между {cicle} и {/cicle}

preg_match('({cicle}(.*){/cicle})',$content,$array);


Если весь html привести в 1 строку то всё работает нормально
Вот толька если в шаблоне есть пару абзацев не br или p а именно абзацев, то он ничего не может найти
Вопрос как учесть абзаци итд ?



Спустя 6 минут, 26 секунд (10.02.2012 - 02:38) GET написал(а):
lans8097

странно, как то...


{cicle}
<tr class="tr">
<
td>
<
p></p>
</
td>
</
tr>
{/cicle}


не найдет?

Спустя 5 минут, 31 секунда (10.02.2012 - 02:44) lans8097 написал(а):
Цитата (A.B.C. @ 9.02.2012 - 23:38)
lans8097

странно, как то...


{cicle}
<tr class="tr">
<
td>
<
p></p>
</
td>
</
tr>
{/cicle}


не найдет?

Проблема не в html тегах а именно в абзацах в самом коде

Спустя 17 минут, 57 секунд (10.02.2012 - 03:02) jetistyum написал(а):
попробуй с модификатором /m

Спустя 43 секунды (10.02.2012 - 03:02) jetistyum написал(а):

preg_match('/({cicle}(.*){/cicle})/m',$content,$array);



еще попробуй /s


preg_match('/({cicle}(.*){/cicle})/s',$content,$array);


или комбинацию их, непомню уже точно как лучше раотает

Спустя 35 минут, 6 секунд (10.02.2012 - 03:38) lans8097 написал(а):
Цитата (jetistyum @ 10.02.2012 - 00:02)

preg_match('/({cicle}(.*){/cicle})/m',$content,$array);



еще попробуй /s


preg_match('/({cicle}(.*){/cicle})/s',$content,$array);


или комбинацию их, непомню уже точно как лучше раотает

хз уже игрался хз как

Если делать так

{cicle}<tr class="tr"><td><input name="" type="checkbox" value=""></td><td>{#}</td><td>{login}</td><td>{password}</td><td>{email}</td><td>{regDate}</td><td></td></tr>{/cicle}

То регулярка работает а если вот так

{cicle}
<tr class="tr">
<td><input
name="" type="checkbox" value=""></td>
<td>
{#}</td>
<td>
{login}</td>
<td>
{password}</td>
<td>
{email}</td>
<td>
{regDate}</td>
<td></td>
</tr>

{/cicle}

то не работает =-(...

Мож я както не правильно модификаторы использую ?

preg_match("/({cicle}(.*){\/cicle})/m",$content,$array);

Спустя 5 минут, 12 секунд (10.02.2012 - 03:43) GET написал(а):
lans8097

наверное он перенос строки находит /n и по этому не совпадение

Спустя 29 минут, 5 секунд (10.02.2012 - 04:12) lans8097 написал(а):
Цитата (A.B.C. @ 10.02.2012 - 00:43)
lans8097

наверное он перенос строки находит /n и по этому не совпадение

И так тоже не хочет ((

$content='
{cicle}
<tr class="tr">
<td><input name="" type="checkbox" value=""></td>
<td>{#}</td>
<td>{login}</td>
<td>{password}</td>
<td>{email}</td>
<td>{regDate}</td>
<td></td>
</tr>
{/cicle}
'
;
echo preg_match("({cicle}(.*){\/cicle}/n)",$content,$array);
echo'<pre>';
echo(htmlspecialchars($array[0]));
echo'</pre>';

Вот заготовочка может ктото поиграеца и найдёт решение ?

Спустя 1 час, 41 минута, 13 секунд (10.02.2012 - 05:53) Игорь_Vasinsky написал(а):
уж да... а то что фигурные скобки - это спецсимволы, которые используються для указания квантификаторов вы как будто не слышали? и для чего модификатор -s вы то же не знаете?


<?php
$html = '<form action="" method="get">
<table class="usersTab" cellpadding="0" cellspacing="0">
<tr>
<th width="5px"> </th>
<th width="5px">#</th>
<th>Логин</th>
<th>Имя</th>
<th>почта</th>
<th>Дата регистрации</th>
<th> </th>
</tr>
{cicle}
<tr class="tr">
<td><input name="" type="checkbox" value=""></td>
<td>{#}</td>
<td>{login}</td>
<td>{password}</td>
<td>{email}</td>
<td>{regDate}</td>
<td></td>
</tr>
{/cicle}
</table>
</form>
</td>
</tr>
</table>'
;

preg_match("#\{cicle\}(.*)\{\/cicle\}#ius", $html, $array);

echo '<pre>' . print_r(array_map('htmlspecialchars',$array), 1) . '</pre>';
?>



на выходе

Array
(
[0] => {cicle}
<tr class="tr">
<td><input
name="" type="checkbox" value=""></td>
<td>
{#}</td>
<td>
{login}</td>
<td>
{password}</td>
<td>
{email}</td>
<td>
{regDate}</td>
<td></td>
</tr>

{/cicle}
[1] =>
<tr class="tr">
<td><input
name="" type="checkbox" value=""></td>
<td>
{#}</td>
<td>
{login}</td>
<td>
{password}</td>
<td>
{email}</td>
<td>
{regDate}</td>
<td></td>
</tr>


)



если в windows-1251 то без модификатора -u

preg_match("#\{cicle\}(.*)\{\/cicle\}#is", $html, $array);



1. экранирование спецсимволов в паттерне
2. экранирование символов если они такие же как те, в которых заключён паттерн

Спустя 3 минуты (10.02.2012 - 05:56) Игорь_Vasinsky написал(а):
ph34r.gif

Спустя 8 часов, 15 минут, 44 секунды (10.02.2012 - 14:12) lans8097 написал(а):
Цитата (Игорь_Vasinsky @ 10.02.2012 - 02:56)
ph34r.gif

Пасиб ))
Теперь буду внимательней с экранизацией )

Спустя 14 минут, 31 секунда (10.02.2012 - 14:26) Winston написал(а):
Цитата (jetistyum @ 10.02.2012 - 02:02)
попробуй с модификатором /m

Здесь он точно не катит. А вот /s в самый раз
Цитата (Игорь_Vasinsky @ 10.02.2012 - 04:53)
echo '<pre>' . print_r(array_map('htmlspecialchars',$array), 1) . '</pre>';

Зачем такие танцы, если можно просто написать :)
echo '<pre>' . htmlspecialchars(print_r($array, 1)) . '</pre>';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.