Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для Wegik
0 / 0 / 1
Регистрация: 23.08.2014
Сообщений: 63

Поиск в файле всех пунктов меню (проверка кода)

28.09.2014, 01:11. Показов 696. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С регулярными выражениями работаю впервые, вот возникла необходимость написать редактор меню, написал, хотелось бы узнать мнение более опытных программыстов. Заранее спасибо)
Взял часть кода:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 case 'cms':
            $kontent="";
            $file=file ('../../../shablon/cms.php');
            for ($i=0; $i<count ($file); $i++){
                if (preg_match ('/.*<div class="meny_verh">/i', $file[$i])){
                    $kontent.="Верхнее меню:";
                    for ($y=$i; $y<count($file); $y++){
                        if (preg_match ('/.*<a href="(.*)">/i', $file [$y], $str_link)){
                            preg_match ('/.*">(.*)<\/a>/i', $file [$y], $str_name);
                            $kontent.="</br>Ссылка: <input type='text' size='40' value='".$str_link['1']."'></input>
                            Имя: <input type='text' size='25' value='".$str_name ['1']."'></input>";
                        }
                        if (preg_match ('/.*<\/div>/', $file [$y])){
                            break;
                        }
                    }
                }
                if (preg_match ('/.*<div class="meny_text">/i', $file[$i])){
                    $kontent.="</br></br>Левое меню:";
                    for ($y=$i; $y<count ($file); $y++){
                        if (preg_match ('/.*<a href="(.*)">/i', $file[$y], $str_link)){
                            preg_match ('/.*">(.*)<\/a>/i', $file[$y], $str_name);
                            $kontent.="</br>Ссылка: <input type='text' size='40' value='".$str_link['1']."'></input> 
                            Имя: <input type='text' size='25' value='".$str_name ['1']."'></input>";
                        }
                        if (preg_match ('/.*<\/div>/i', $file [$y])){
                            break;
                        }
                    }
                }
                if (preg_match ('/.*<div id="podval">/', $file [$i])){
                    $kontent.="</br></br>Подвал:";
                    for ($y=$i; $y<count ($file); $y++){
                        if (preg_match ('/.*<a href="(.*)">/i', $file [$y], $str_link)){
                            preg_match ('/.*">(.*)<\/a>/i', $file [$y], $str_name);
                            $kontent.="</br>Ссылка: <input type='text' size='40' value='".$str_link ['1']."'></input>
                            Имя: <input type='text' size='25' value='".$str_name ['1']."'></input>";
                        }
                    }
                }
            }
            break;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2014, 01:11
Ответы с готовыми решениями:

Получение всех пунктов меню
Уважаемые коллеги, прошу Вашего совета. Нужно при запуске приложения (ACCESS'02 Project) пробегаться по всем пунктам и подпунктам меню. ...

Сдвиг всех пунктов меню в блоке header
Здравствуйте форумчане! Подскажите пожалуйста как можно сдвинуть меню (пункты меню) в хедере чуть ниже. Т.е. хедер остается на месте, а сам...

Предотвратить открывание всех пунктов меню при загрузке
есть такое меню: &lt;div id=&quot;menu&quot;&gt; &lt;ul id=&quot;accordion&quot;&gt; &lt;li id=&quot;m1&quot;&gt; ГЛАВНЫЙ ПУНКТ 1 &lt;ul&gt; ...

2
177 / 125 / 28
Регистрация: 30.10.2013
Сообщений: 686
30.09.2014, 17:46
Если работает - то это уже хороший код. А так насчет просмотра вашего кода ... я надеюсь, что вы понимаете, что на вкус и цвет...

Но к примеру не понятно что за переменная $file без обращения к коду, который её использует. Да и даже тогда не очень понятно. К примеру, если взять кусок кода

PHP
1
$file=file ('../../../shablon/cms.php');
то вот как понять что вы имели ввиду? Переменная должна быть понятной на столько, чтобы можно было понять её предназначение по одному лишь названию
PHP
1
$file
Не используйте этот поганый транслит "$kontent", никогда. Это считается плохим тоном и обычно означает, что программист ещё новичок

Не используйте $y как счетчик, для этого есть i,j,k. Т.к. $y и $x ассоциируются у всего населения с координатами, а не счетчиком.

расскажите что означает данная строка без обращения к контексту, где она появляется:
PHP
1
$str_link ['1']
что это за единица? что она означает? почему не 2, а есть 3? а они последовательны? Не проще ли сделать более понятно:
PHP
1
$linkHref = $str_link ['1'];
Делайте переменные понятными, чтобы их можно было вырывать из контекста и сразу понимать что в ней должно быть

Так же, не бойтесь создавать дополнительные переменные и методы, чтобы понять ваш код можно было за секунды, а не за часы.

Добавлено через 5 минут
Ещё хочу добавить, что у вас явный копипаст, от которого необходимо избавиться
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
01.10.2014, 10:16
а я б пристрелил за использование транслита, конструкций вида
PHP
1
preg_match ('/.*<a href="(.*)">/i', ...)
или
PHP
1
preg_match ('/.*">(.*)<\/a>/i', ...)

Не по теме:

попробуйте две ссылки запихать в одну строку, чтоб заматчились в этом условии, и поймете о чем я

, а еще за вот такую, понатыканную везде, штуку:
HTML5
1
</br>
А вообще, мне думается, что вы используете регулярки неэффективно, и многое можно было бы объединить в одной. как говорится,
Code
1
cat ../../../shablon/cms.php
for more details
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2014, 10:16
Помогаю со студенческими работами здесь

Добавить id для всех пунктов меню первого уровня
Есть скрипт меню. Нужно к каждому пункту меню добавить уникальный идентификатор - для того, чтобы потом задать каждому отдельные css стили....

MenuStrip и прочее меню созданное в VS - программный поиск ToolStripMenuItem и добавление в него новых пунктов
Друзья, устал... Сил нет, а от того просьба в поиске простого решения: Раньше, в паре проектов, когда нужно было динамить небольшое...

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не могу понять почему не работает: ...

Центровка пунктов в выпадающем меню по центру ul блока (Битрикс меню)
Всем привет! Требуется в выпадающем меню, т.е. в самых блоках выпадающего меню, сделать чтобы все ссылки были в центре, т.е. чтобы они...

MainMenu: поменять цвет и ширину полосы меню и пунктов меню
По форуму конкретного решения не нашел. Не подскажите, возможно ли поменять цвет и ширину полосы меню и пунктов меню в приложении ?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru