|
|
|
| Есть фрагмент документа
фыдвлор дловраф двылоар
<!-- Start -->
жфдывл
Могут быть другие теги и вообще все, что угодно
ъвыло
выдлоар
<!-- Stop -->
ждфлвоыарж
|
Как выбрать все, что находится между <!-- Start --> и <!-- Stop -->?
Сам я мучился долго, посмотрел на сообщения здесь, но ничего не получается :-( | |
|
|
|
|
|
|
|
для: WebTech
(08.05.2007 в 11:59)
| |
<!-- Start -->(.+?)<!-- Stop -->
|
| |
|
|
|
|
|
|
|
для: Loki
(08.05.2007 в 12:05)
| | Использовал такую конструкцию, но не работает.
$data = preg_replace('%<!-- Start -->(.+?)<!-- Stop -->%sUi', '\\1', $file);
|
| |
|
|
|
|
|
|
|
для: WebTech
(08.05.2007 в 16:22)
| | preg_replace не выбирает, а заменяет. выбирает preg_match. А в остальном все работает правильно. | |
|
|
|
|
|
|
|
для: WebTech
(08.05.2007 в 16:22)
| | Когдато то же искал ответы на подобные вопросы, а все просто :)
ТОЛЬКО один минус, если подобных фрагментов встричается несколько, отдаст только первый.
// $str - строка с которой происходят операции
// $flag1 - текст от символов
// $flag2 - текст до символов
function get_str_fragment($str,$flag1,$flag2) {
$str = explode($flag1,$str);
$str = explode($flag2,$str[1]);
return($str[0]);
}
|
в $str помещаем код указаный выше
$flag1 - <!-- Start -->
$flag2 - <!-- Stop -->
на выходе получим все что между ними.
print get_str_fragment($str,"<!-- Start -->","<!-- Stop -->") | |
|
|
|
|
|
|
|
для: vbps
(08.05.2007 в 18:04)
| | >> ТОЛЬКО один минус ..... отдаст только первый.
Для этого есть ф-я preg_match_all | |
|
|
|
|
|
|
|
для: kasmanaft
(08.05.2007 в 18:11)
| | да мне это пока и не надо было (а еще кофе не подносит). :) | |
|
|
|
|
|
|
|
для: vbps
(08.05.2007 в 18:14)
| | Спасибо, ваш вариант подходит.
К тому же, строковые функции работают вроде как быстрее регулярных выражений :-) | |
|
|
|
|
|
|
|
для: WebTech
(09.05.2007 в 09:39)
| | Тогда уж, раз нет задачи сделать это с помошью РВ и выбрать все вхождения, а не только первое, лучше сделать так:
<?
$s = substr($s,strpos($s,"<!-- Start -->")+14);
$s = substr($s,0,strpos($s,"<!-- Stop -->"));
?>
| , т.к. explode() это функция работы с массивом, а не со строками. | |
|
|
|
|
|
|
|
для: Sfinks
(09.05.2007 в 17:16)
| | , т.к. explode() это функция работы с массивом, а не со строками.
Да что Вы говорите... | |
|
|
|
|
|
|
|
для: Unkind
(09.05.2007 в 17:32)
| | Может я и не правильно выразился, но мой вариант работает на 10% быстрее. Я проверил. | |
|
|
|
|
|
|
|
для: Sfinks
(09.05.2007 в 18:11)
| | >Может я и не правильно выразился, но мой вариант работает на 10% быстрее. Я проверил.
Возможно и быстрее, не проверял.
Однако мое решение подойдет для любого случая.
Можно разобрать любую страницу по частям и собрать ее как угодно, при этом не меняя в функции ничего. | |
|
|
|