Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234

Простые регулярные выражения

16.03.2012, 22:54. Показов 2003. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать регулярное выражение чтобы проверил на правильность php файл.
PHP
1
2
3
<?
/*Комент*/
?>
нужно проверить чтобы был такой шаблон причём количество коментов не ограничено. Внутри коментария можно всё кроме переноса строки.
у меня почему-то не получилось даже для первого символа <? сделать

PHP
1
$i = preg_match("/^[<?][\n]$/",$b);
если написать [<][?] то совпадёт в случае если за символом не следует переноса строки, а мне нужно чтобы был.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2012, 22:54
Ответы с готовыми решениями:

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения
Доброго времени суток! Первый раз работаю с регулярными выражениями. Задание: Из сайта http://price.ua/index/vendors.html,...

Регулярные выражения
$pattern = &quot;()&quot;; как доработать паттерн, чтобы регулярка реагировала и на пустое место,а не только на символы, отличные от цифр,...

16
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
16.03.2012, 22:57
PHP
1
$i = preg_match("/^<\?(php)?[^\n]+\?>$/",$b);
1
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
16.03.2012, 23:32  [ТС]
Пытался написать сам, но похоже придётся просить помощи, ничего не получается.
Пытаюсь написать регулярное выражение чтобы проверить целостность файла с таким шаблоном:
PHP
1
2
3
4
5
6
7
8
<?
//name
//koment
$asadwd = "1";
//name
//koment
$asadwd = "1";
?>';
В общем блоков
PHP
1
2
3
//name
//koment
$peremennaya = "val";
может быть сколько угодно, пробелов до и после равно может быть или не быть как и кавычек.
Помогите пожалуйста, начал изучать данную тему и ничего не выходит.
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
16.03.2012, 23:43
Вы начали только изучать и уже пишете такое
Вот проверка переменной
Code
1
/^\$[\w]+\s?=\s?('|")?[^'"]('|")?$/
Получается так:
символ $ (его надо экранировать т.к. он используется в рег. выражениях)
[\w]+ один или больше символов ( A-Za-z и знак подчеркивания)
0 или 1 пробел
кавычки 0 или 1 раз
любые символы, кроме кавычек
кавычки 0 или 1 раз

Добавлено через 1 минуту
ой, \w - еще и цифры
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
17.03.2012, 00:32  [ТС]
Начал пробовать по всякому пока только для переменной и получается вот что
PHP
1
/^(\$[a-zA-Z][\w]+\s?=\s?(\'|")?[^\'"](\'|")?;[^\n]+)*$/
не знаю не намудрил ли я со скобками но для
PHP
1
2
$string = '$asadwd = "1";
';
работает, а вот уже для
PHP
1
2
3
4
$string = 
'$asadwd = "1";
$asadwd = "1";
';
нет.
Ещё почему-то когда заключал в двойные кавычки и внутри экранировал двойные слешем не работало, когда поставил в одинарные и экранировал одинарные получилось.
PHP
1
2
$i = preg_match('/^(\$[a-zA-Z][\w]+\s?=\s?(\'|")?[^\'"](\'|")?;[^\n]+)*$/',$string);
echo $i;
Так вот почему же несколько переменных он мне не ищет?
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
17.03.2012, 00:44
Подождите, вы пишите, чтобы в коце не было перевода ( [^\n]) строки и поставили символ конца строки ($)
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
17.03.2012, 12:57  [ТС]
Это я чё-то намудрил, но пробовал и по другому.
PHP
1
2
3
4
5
$string = 
'$asadwd = "1";
$asadwd = "1";
';
$i = preg_match('/^(\$[a-zA-Z][\w]+\s?=\s?(\'|")?[^\'"](\'|")?;[\n])*$/',$string);
Правильно ли я сделал что взял всё это в скобки?
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
17.03.2012, 13:20
По идеи, да. Вы сделали "подшаблон", который может повторяться несколько раз.
0
17.03.2012, 14:34

Не по теме:

Цитата Сообщение от Austerus Посмотреть сообщение
Помогите написать регулярное выражение чтобы проверил на правильность php файл.
Если Вы хотите полностью проверять валидность синтаксиса любого PHP-файла, можно запускать консольный php с ключом -l (маленькая буква L):
Code
1
2
$ php -l file.php 
No syntax errors detected in file.php

0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
17.03.2012, 15:33  [ТС]
Спасибо, я это учту, но мне нужно проверить файл на соответствие шаблону. Пока отложу эту задачу.
0
239 / 236 / 43
Регистрация: 16.03.2011
Сообщений: 750
17.03.2012, 19:55
Можно составить REGexp но это долго и нудно легче сделать так:
Если код(из поста 3) всегда имеет одну структуру изменяется только содержимое комментариев, название переменных и данные, получаем шаблон:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
T_OPEN_TAG
T_WHITESPACE
T_COMMENT
T_WHITESPACE
T_COMMENT
T_WHITESPACE
T_VARIABLE
T_WHITESPACE
T_WHITESPACE
T_CONSTANT_ENCAPSED_STRING
T_WHITESPACE
T_COMMENT
T_WHITESPACE
T_COMMENT
T_WHITESPACE
T_VARIABLE
T_WHITESPACE
T_WHITESPACE
T_CONSTANT_ENCAPSED_STRING
T_WHITESPACE
T_CLOSE_TAG
Ключ:
3673703653703653703093700370315037036537 036537030937003703150370369
Вот код который создаёт ключ:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$s='<?
//любые коменты
//любые коменты
$name_any = "любые данные";
//любые коменты
//любые коменты
$name_any222 = "любые данные";
?>';
$tokens = token_get_all($s);
for($i=0;$i<count($tokens);++$i){
$m=(int)$tokens[$i][0];
$s.=$m;
}
echo $s;
В дальнейшем нужно просто создать "ключ" проверяемого кода и сверить с ключом шаблона.
1
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
18.03.2012, 19:47  [ТС]
Спасибо за интересный способ, у меня получилось! Спасибо всем!
0
1 / 1 / 0
Регистрация: 15.03.2012
Сообщений: 4
18.03.2012, 21:08
Господа помогите разобраться или найти решение. Мне необходимо чтобы регулярное выражения пропускало числа до количества 6 (например 264 или 483012) и пустое поле если туда ничего не вписали. Если там есть что-нибудь кроме цифр и ничего регулярное выражение должно это не пропускать. Как мне указать чтобы пустое значение проходило ?

PHP
1
2
3
4
5
6
7
8
9
10
        if (!preg_match("/^[0-9]{0,6}$/", $c_k)) {
            $k = false;
            $q="1";
            $error_1 = "Проверьте поле, вписывать можно только цифры!";
            } elseif (empty($c_k)) {
                } else {
        $k = 0;
                $k = $c_k;
                $error_1 = "";
                }
ps: я не программист, просто иногда интересно что-нибудь сделать ,)
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
19.03.2012, 00:12  [ТС]
Появился ещё один вопрос, мне нужно вырезать название переменной и её значение.
Например $var="val";
Нужно вынуть значение var и val.
А поводу пустого значения, я в регулярном не знаю, но можно сделать вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
if($c_k !="")
{
if (!preg_match("/^[0-9]{0,6}$/", $c_k)) {
            $k = false;
                        $q="1";
            $error_1 = "Проверьте поле, вписывать можно только цифры!";
            } elseif (empty($c_k)) {
                } else {
                $k = 0;
                $k = $c_k;
                $error_1 = "";
                }
}
else
$error_1 = "Впишите в поле цифры!";
Может не очень красиво, но зато должно работать.
0
239 / 236 / 43
Регистрация: 16.03.2011
Сообщений: 750
19.03.2012, 10:00
regexp для $var="val"; будет примерно таким:
\$([\w\d_]+)="([\w\d_]+)";
1
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
19.03.2012, 23:16  [ТС]
Чуток изменил под нужды, получилось это:
PHP
1
/^\$([\w\d_\[*"\w\d_"\]*]+)\s*=\s*"([\w\d_]+)";$/
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 234
22.03.2012, 00:40  [ТС]
Снова мне требуется помощь. Мне нужно проверить правильно ли пользователь в вёл переменную. по шаблону "первая буква латиница большая или маленькая, любые латинские буквы или цифры или знак подчёркивания, возможно символ '[' и ']' и ещё внутри могут быть кавычки и название ключа массива.
Так вот со всем понятно кроме вот чего, мне нужно чтобы если [ открылся то он соответственно и закрыться должен, и если внутри есть кавычки то они должны закрываться и внутри должен быть ключ. Подскажите пожалуйста, заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.03.2012, 00:40
Помогаю со студенческими работами здесь

Регулярные выражения
Составить регулярное выражение, является ли заданная строчка IP адресом, записанным в десятичном виде. Ребят, помогите, вообще регулярки...

регулярные выражения
есть файл 1.txt,в нем такие строки INSERT INTO `knigi` VALUES (1, 'животные', 'медведь', 2011, '10.00'); INSERT INTO `knigi` VALUES (2,...

Регулярные выражения
Добрый день. Помогите заменить строку к примеру: /eelnou-otsing/eelnou-otsing/eelnou-otsing/?prepage=15 на ...

регулярные выражения
Определить является ли входная лента, лентой - abcdefghijklmnopqrstuv18340 Где здесь ошибка в выражении? &lt;!DOCTYPE html PUBLIC...

Регулярные выражения
Добрый день. Есть пара задач, нужна консультация. 1. Необходимо первую букву каждого нового предложения сделать жирным. Мой...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru