Есть хтмл шаблончик такого типа
<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} не найдет? |
Проблема не в 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) |
еще попробуй /s
или комбинацию их, непомню уже точно как лучше раотает |
хз уже игрался хз как
Если делать так
{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 и по этому не совпадение
наверное он перенос строки находит /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 вы то же не знаете?
на выходе
если в windows-1251 то без модификатора -u
1. экранирование спецсимволов в паттерне
2. экранирование символов если они такие же как те, в которых заключён паттерн
<?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 написал(а):
Спустя 8 часов, 15 минут, 44 секунды (10.02.2012 - 14:12) lans8097 написал(а):
Цитата (Игорь_Vasinsky @ 10.02.2012 - 02:56) |
Пасиб ))
Теперь буду внимательней с экранизацией )
Спустя 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>';