Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12

Нужно разбить строку по условию <?.?>, <?php ?>

22.12.2012, 22:37. Показов 2821. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Нужна помощь.
К примеру, есть запись в бд вида:

текст текст текст текст текст текст текст текст <?php ... ?> текст текст текст текст <? ... ?> текст текст текст текст текст текст текст текст текст текст текст <?php ... ?>. Нужно разбить этот текст в массив вида:

[0] => текст текст текст текст текст текст текст текст,
[1] => <?php ... ?>,
[2] => текст текст текст текст,
[3] => <? ... ?>,
[4] => текст текст текст текст текст текст текст текст текст текст текст,
[5] => <?php ... ?>

Как можно такое реализовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2012, 22:37
Ответы с готовыми решениями:

Разбить поле и создать новую строку по условию
ДОброго всем времени суток! Хочу реализовать следующее: 1. имеем таблицу с полями Field1, Field2, Field3 2. в Field3 может...

Нужно разбить строку
Есть вот такая строка АВСТРАЛИЯ: Премьер-лига Виктории45+'Мельбурн Найтс - Оакли Кэннонс 0:0АВСТРАЛИЯ: Премьер-лига Брисбена45+'Капалаба...

Нужно разбить строку на числа
Приветствую всех! Суть в том что синтаксис split для меня на данный момент дремучий лес, а задача стоит предо мною такова: нужно...

16
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
23.12.2012, 00:03
зачем это нужно? опиши подробно задачу, возможно этого и не требуется.
0
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 00:38  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
зачем это нужно? опиши подробно задачу, возможно этого и не требуется.
Есть задача -- хранение всех страниц сайта в отдельной таблице в бд. Необходимо, чтобы помимо html кода в базе мог храниться и php код в любом количестве как строк, так и конструкций типа <? .. ?>, <?php ... ?>. Вытащить такую запись из БД не составляет труда, однако проблема в том, чтобы полученный текст отображался как текст, а конструкции php обрабатывались как php-код.

Я пришел к выводу разбить всю строку на подстроки, и искать в начале "<?". Если находим, то используем функцию eval, если не находим, то echo.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
23.12.2012, 00:56
Цитата Сообщение от chertog Посмотреть сообщение
Я пришел к выводу
убрать php-код из данных, т.к. php-код не является данными.
0
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:06  [ТС]
Цитата Сообщение от OnYourLips Посмотреть сообщение
убрать php-код из данных, т.к. php-код не является данными.
php код не является данными, но что может мешать мне хранить его в базе данных? Мне нужно чтобы код интерпретировался, и мне кажется, что этого можно достичь. Подскажите решение лучше, если знаете. Убрать код из данных на данный момент не решение
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:11
Структура данных везде одинакова, т.е. всегда в 1,3,5 элементе массива будет код php? Если нет, то нужно двумя регулярками прогонять, да и решение какое-то "кривое" получиться )))
0
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:15  [ТС]
Цитата Сообщение от fa2m Посмотреть сообщение
Структура данных везде одинакова, т.е. всегда в 1,3,5 элементе массива будет код php?
Нет, php конструкций может быть сколько угодно и располагаться они могут как угодно. Т. е. могут располагаться даже одна за одной, а могут совсем отсутствовать.
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:19
Вот, блин ))) Тогда получается нужно разбивать регуляркой, а потом ещё каждый элемент проверять на наличие в нём PHP кода, чтобы применить к нему eval().
0
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:19  [ТС]
Да я думал про две регулярки и два массива, но мне показалось, что решение реально "кривое") Неужели нет функции в php которая бы разбивала строку по регулярному выражению, при этом оставляя результат регулярного выражения так же в массиве?
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:24
Даже решение с двумя регулярками не поможет (это я поспешил), поскольку Вы то получите отдельно текст, отдельно код, но не будете знать, что за чем идёт
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
23.12.2012, 01:28
Цитата Сообщение от chertog Посмотреть сообщение
но что может мешать мне хранить его в базе данных?
здравый смысл.

Цитата Сообщение от chertog Посмотреть сообщение
Подскажите решение лучше, если знаете.
Уже.
Вынести код туда, где ему место.
В зависимости от кода.
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
23.12.2012, 01:30
А в тексте html теги есть?
1
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 01:57  [ТС]
Чтож, вариант хранить все страницы в отдельных файлах (которые лежат в отдельных каталогах), и создавать таблицу соответствий в бд, с заголовками, мета данными и символьными кодами, как это делает битрикс. Однако, это создает неудобное нагромождение. И хочется чего-то поудобнее.
Нечто подобное тому, чего я хочу, реализует modx. Однако там вызов кода реализуется с помощью специальных конструкций вида {{}}, и с помощью этих конструкций тянуться php файлы.
Я же хочу перенести всю работу страниц сайта в базу данных, только с тем условием, что можно спокойно писать в этих кодах как html код, так и php.

Добавлено через 18 минут
И все же, господа, неужели нет способа разбить такую строку в нужный мне массив?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.12.2012, 02:19
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$text = 'текст текст текст текст текст текст текст текст <?php echo "One"; ?> 
текст текст текст текст <? echo "Two"?> текст текст текст текст текст текст текст 
текст текст текст текст <?php echo "Three";?>. Нужно разбить этот текст в массив вида:';
$pattern = '~.*?<\?(php)?(.*?)\?>.*?~is';
if(preg_match_all($pattern, $text, $matches)) {
    echo '<pre>';
    if(!empty($mathes[2]))
        print_r($matches[2]);
    else
        echo 'PHP-код не найден';
    echo '</pre>';
}
else
    echo 'Совпадений не найдено';
только это явно не лучшее решение

Добавлено через 1 минуту
для html надо писать отдельный парсер
1
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 06:20  [ТС]
в общем в итоге получилось как то так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    $pattern = '~.*?<\?(php)?(.*?)\?>.*?~is';
    if(preg_match_all($pattern, $PageInformation[content], $matches)) {
      $i = 0;
      while($i <= count($matches[0])){
        if(!empty($matches[0][$i])) {
          $patt = '/(<\?.*\?>)/s';
            $matches[0][$i] = preg_replace($patt, '', $matches[0][$i]);
          echo $matches[0][$i];
        }
        if(!empty($matches[2][$i])) {
          $code = $matches[2][$i];
          eval($code);
        }
        $i++;
      }
    }
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
23.12.2012, 10:54
ну у вас явно ужасающая архитектура
хранить в БД нужно данные, а не php код
нет никаких причин хранить php код в теле "страниц", т.е. шаблонах
да и шаблоны в БД хранит нет смысла

я бы вот что сделал - я бы кэшировал как файлы ваши данные из таблиц и с помощью буферизации вывода генерировал бы страницы и через include подключал. но, повторюсь - ваша архитектура - гумно, уходите от неё.
1
 Аватар для chertog
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 12
23.12.2012, 20:11  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
ну у вас явно ужасающая архитектура
хранить в БД нужно данные, а не php код
нет никаких причин хранить php код в теле "страниц", т.е. шаблонах
да и шаблоны в БД хранит нет смысла

я бы вот что сделал - я бы кэшировал как файлы ваши данные из таблиц и с помощью буферизации вывода генерировал бы страницы и через include подключал. но, повторюсь - ваша архитектура - гумно, уходите от неё.
Спасибо, я подумаю. Задумка вот в чем у меня:

Существуют некие классы, выводящие на веб-страницу определенные элементы (к примеру форму авторизации, если пользователь не авторизован, блок новостей, и т. д.) метод класса вызывается одной строчкой кода, вида
PHP
1
inc::Object("name_object", $settings = Array("template" => "name_template", "pagination" => 10, ...);
идея в том, чтобы организовать визуальный редактор страницы на сайте, с добавлением драг н дропом каких-то подобных элементов (элементы на панели отображаются в виде иконок, кликая на иконку в окно автоматически вставляется код).

Сейчас я думаю, что если ввести некий синтаксис отвечающий за вывод таких элементов (к примеру возьмем конструкцию вида {= =}, в которой будем передавать определенные настройки, а при отображении страницы заменять эти конструкции реальным кодом с заданными настройками. Такой вариан смотрится лучше, или тоже не годится?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2012, 20:11
Помогаю со студенческими работами здесь

Как разбить строку на слова по некоторому символу, php?
Есть строка &quot;город (Субъект)&quot;. Например, &quot;Чита (Забайкальский край)&quot; как мне разделить эту строку так, что бы в одной переменной был город,...

Нужно разбить строку с арифметическим выражением на маленькие блоки
Добрый вечер, помогите разбить строку с арифметическим выражением на маленькие блоки. Т.е. мне приходит 2 значения: string buffer и int...

Нужно сдвинуть строку в таблице по условию
Здравствуйте форумчане. Делаю дипломный проект, нужна небольшая помощь. Ситуация такая: Делаю программу по записи заявок. У этих заявок...

нужно разбить строку на массив, ошибка: assignment to expression with array type o=0;
Дана строка, состоящая из однозначных и двузначных чисел, разделенных пробелами. Необходимо разбить эту строку на числа и записать их в...

нужно разбить исходную строку на две подстроки , причём первая длинной k
Вообщем нужно разбить исходную строку на две подстроки , причём первая длинной k. Вот код который я написал: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru