ФорумПрограммированиеPHP для идиотов → Регулярные выражения

Регулярные выражения

  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 13 ноября 2010 г. 3:43

    Подскажите пожалуйста как написать регулярное выражение для поиска строки заключенной между фигурными скобками и содержащую в себе точку. Т.е. {inc.form}

    Написал так

    preg_match_all("|[{]+[a-z.]+[a-z]+[}]|", $row_page_content["content"], $script_link);

    где $row_page_content["content"] - это текст в котором и нужно искать выражение.
    Спустя 70 сек.
    Но при таком поиске он так же вместе с {inc.form} находит еще и {map}
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 13 ноября 2010 г. 4:15, спустя 32 минуты 24 секунды

    сори за беспокойство… в статьях на форуме нашел то что надо
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 13 ноября 2010 г. 6:11, спустя 1 час 56 минут 23 секунды

    Напиши, как ты решил проблему. Не оставляй так тему.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 13 ноября 2010 г. 7:38, спустя 1 час 27 минут 1 секунду

    /{([^}]+)/

    такой вариант покатит?))
    Высокоуровневое абстрактное говно
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 14 ноября 2010 г. 8:14, спустя 1 день 35 минут

    "|[{]+[a-z]+[\.]+[a-z]+[}]|" я вот так сделал
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 14 ноября 2010 г. 8:38, спустя 24 минуты 28 секунд

    ужас))
    Спустя 55 сек.
    аа… что бы обязательно была точка)) блин… вечно не дочитываю))
    Спустя 152 сек.
    всё равно ужас))
    Спустя 83 сек.
    "|[{]+[a-z]+[\.]+[a-z]+[}]|"

    {incform} - false
    {inc.form} - true
    {{{inc.form} - true
    {inc….form} - true
    Спустя 285 сек.
    /{\w+\.\w+}/

    {incform} - false
    {inc.form} - true
    {{{inc.form} - true
    {inc….form} - false
    Высокоуровневое абстрактное говно
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 15 ноября 2010 г. 5:41, спустя 21 час 2 минуты 56 секунд

    Вопрос может быть не по теме но все же…

    Задача. В БД хранится текст. В этом тексте есть выражения в фигурных скобках {map}. Необходимо из БД вывести весь текст но метки {map} Заменить файлом… т.е. заметсто {map} приинклудить файл map.php

    Механизм придумал я такой. С помощью регулярных выражений нохожу в текстке все метки (в фигурных скобках). После писка у меня есть массив. Array ( [0] => {map} [1] => {form} ). Затем нужно это все заменить на файлы.

    Делаю это с помощью функции preg_replace.
    приведу пример (В коде немного не так, но смысл один и тот же)

    $test = "include ('inc.form.php')";
    echo preg_replace("#[{]+[a-zA-Z.]+[}]#e", $test, $row_page_content["content"]);

    Приинкулудить файл мне удается… Только вот вопрос. Почему сначала инклудются файлы а поом выводится текст?

    тоесть… Текст из бд такой:

    ля ля ля ля яля ля ял я ля
    {inc.form}
    текст текст текст

    А после замены получается так:

    {inc.form} (файл приинклудился)
    ля ля ля ля яля ля ял я ля
    текст текст текст

    Для того что бы все появлялось там где надо пробовал вариант чтоб с помощью функции file_get_contents читать файл в строку и потом заменять… все работает как надо.. ну вот только проблема есть… надо что бы файлы были подключены с помощью include.. это принципиально

  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 15 ноября 2010 г. 11:17, спустя 5 часов 35 минут 52 секунды

    Чтоб хоть как то решить проблему это я решил сделать так.

    Сначала в контенте который хранится в БД я нахожу метки на файлы (т.е. фигурные скобки)


    preg_match_all("|[{]+[a-zA-Z.]+[}]|", $row_page_content["content"], $script_link); // Находим указатели на скрипты
    for ($i=0; $i< count($script_link[0]); $i++) {
    $patterns_content_script[] = $script_link[0][$i];
    }


    Массив $patterns_content_script[] - содержит в себе метки на файлы

    Дальше я разибваю контен на части по меткам


    $text = preg_split("|[{]+[a-zA-Z.]+[}]|", $row_page_content["content"]);


    Ну а дальше вывожу это дело все…


    $num = count($text);

    for ($i=0; $i< $num; $i++) {
    echo $text[$i];
    echo $patterns_content_script[$i];
    }


    Вопрос. Слишком глупо?.
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 15 ноября 2010 г. 12:06, спустя 49 минут 11 секунд

    Подход изначально глупый
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 15 ноября 2010 г. 13:26, спустя 1 час 19 минут 31 секунду

    чем именно?
  • AlexB

    Сообщения: 4297 Репутация: N Группа: в ухо

    Spritz 16 ноября 2010 г. 3:34, спустя 14 часов 8 минут 1 секунду


    $test = "include ('inc.form.php')";
    В суть не вникал, слишком много букв, но здесь ты явно имел ввиду file_get_contents, а не include. Прада расширение php меня сильно смущает, не понятно чего ты в итоге хочешь.
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 16 ноября 2010 г. 13:33, спустя 9 часов 58 минут 46 секунд

    просто когда вывожу файл в строку (file_get_contents) у меня ыфволняются скрипты не так как надо… например если я буду подключать скрипт test.php с помощью file_get_contents на странице /content, то $_SERVER["REQUEST_URI"] будет равен /test.php А мне надо что бы $_SERVER["REQUEST_URI"] был равен /content. Поэтому я и использую include вместо file_get_contents
    Спустя 79 сек.
    Хотя я не исключаю того что я не прав, поэтому все равно работаю над этим вопросом
  • AlexB

    Сообщения: 4297 Репутация: N Группа: в ухо

    Spritz 16 ноября 2010 г. 14:30, спустя 57 минут 25 секунд

    Ты не прав. С помощью буферизации можно, конечно, засунуть результат выполнения инклюда в переменную, но это изврат, поэтому даже не буду рассказывать как это сделать. )))))
    Меняй что-то в консерватории …
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 16 ноября 2010 г. 14:40, спустя 10 минут 8 секунд

    Я в программировании не супер, но и сам понимаю что то что я сделал это ничуть не меньший изврат, чем ты сказал про инклуд и буферизацию… Я об этом тоже думал… но из двух извратов как говорится выбирают меньший… )))))))))))))))) Блин просто не знаю как правильно сделать… Вроде как весь контент надо в БД хранить… и вто же время срипты хранить в БД нельзя… (ну это как многие говорят..) а что делать если весь сайт это один сплошной php? не знаю…. столько всего перепробовал… ((
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 16 ноября 2010 г. 15:27, спустя 46 минут 23 секунды

    Вот есть такая задача. Контент надо хранить в БД. Но в котенте модержаться php скрипты. Как решить такую задачу. Я предположил что ее можно решить так как описал выше. Я по образованию не программист. Лично с web программистами не общался. вот если пересматривать полход в целом который я предложил. как можно решить эту задачу. Подскажите. В инете ответов на такие вопросы не найти. Везде сплошная теория. Мне интересно как все делается на практике. Как реализовать в виде php кода вопрос намного проще чем выбрать тактику. Подскажите.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!