С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Bigeron
4 / 4 / 0
Регистрация: 01.02.2013
Сообщений: 139

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

21.08.2016, 19:15. Показов 1518. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Задача такая, найти в тексте аналог html тега

Не могу понять, как подправить регулярку ...

PHP
1
$find ='/\<if \[.*\]\ {.*\}\ {.*\} \/>/';
Формат сообщения

<if [любые символы]{любые символы}{любые символы}/>

1. Ошибка в том, что если указывать регулярку в виде

PHP
1
$find ='/\if \[.*\]\ {.*\}\ {.*\} \/>/';
то поиск происходит, если же указывать <if то всё ломается ...

2. если в тексте есть несколько конструкций <if ... />, то поиск происходит некорректный и берёт самый первый if и в плодь до последнего закрывающегося тега
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2016, 19:15
Ответы с готовыми решениями:

Регулярное выражение. >,<,=
Нужно выбрать из таблицы только числа больше 1.000 Пишу : &lt;center&gt;&lt;b&gt;\.{3}&lt;\/td&gt; Но теряю 1.999, а мне нужно все включая 1.001 и...

регулярное выражение
Например есть строка qwerty16 Как проверить что в нее не вложен еще тег к примеру так(qwerty16qwqwqw)?

регулярное выражение
Описать функцию, которая удаляет из заданной строковой величины все лишние пробелы. Пробелы считаются лишними, если их подряд идёт более...

12
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
21.08.2016, 21:07
Цитата Сообщение от Bigeron Посмотреть сообщение
<if [любые символы]{любые символы}{любые символы}/>
Если я правильно понял, то вот:
PHP
1
2
3
$search = '<if[любые символы]{любые символы}{любые символы}/>';
preg_match_all("/^<if\s*\[(.*)\]\s*{(.*)}\s*{(.*)}\s*\/>$/", $search, $m);
print_r($m[0]);
Добавлено через 4 минуты
Цитата Сообщение от Bigeron Посмотреть сообщение
если в тексте есть несколько конструкций <if ... />
Как эти конструкции расположены по тексту?
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
21.08.2016, 22:19
Цитата Сообщение от Пифагор Посмотреть сообщение
Если я правильно понял
После if обязательный пробел, иначе тэг iframe тоже будет валидным.
PHP
1
preg_match_all("/^<if\s+\[(.*)\]\s*{(.*)}\s*{(.*)}\s*\/>$/", $search, $m);
1
 Аватар для Bigeron
4 / 4 / 0
Регистрация: 01.02.2013
Сообщений: 139
22.08.2016, 00:55  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение

Как эти конструкции расположены по тексту?
Может быть в начале, может быть в конце текста, можешь в середине, а может быть и несколько как подряд, так и в разброс.

Добавлено через 1 час 45 минут
И вот что обратил внимание ...
PHP
1
2
3
$search = '<if[любые символы]{любые символы}{любые символы}/>';
preg_match_all("/if\s*\[(.*)\]\s*{(.*)}\s*{(.*)}\s*\/>/", $search, $m);
print_r($m[0]);
результат будет такой
PHP
1
Array ( [0] => if[любые символы]{любые символы}{любые символы}/> )
но если

PHP
1
2
3
$search = '<if[любые символы]{любые символы}{любые символы}/>';
preg_match_all("/<if\s*\[(.*)\]\s*{(.*)}\s*{(.*)}\s*\/>/", $search, $m);
print_r($m[0]);
то в итоге получаем вот что
PHP
1
Array ( [0] => )
Добавлено через 38 минут
Просто нужно в дальнейшем анализировать переменные в [] и {}
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
22.08.2016, 11:59
Добавлено через 1 минуту
Цитата Сообщение от Bigeron Посмотреть сообщение
то в итоге получаем вот что
PHP
1
2
3
$search = '/<if[любые символы]{любые символы}{любые символы}/>';
preg_match_all("~(?<=<)if\\s*(\[.+?\])(\\s*\{.+?\}){2}~ui", $search, $m);
print_r($m[0]);
Добавлено через 1 минуту
Цитата Сообщение от Bigeron Посмотреть сообщение
Просто нужно в дальнейшем анализировать переменные в [] и {}
PHP
1
2
3
$search = '/<if[любые символы]{любые символы}{любые символы}/>';
preg_match_all("~(?<=<)if\\s*\[(.+?)\]\\s*\{(.+?)\}\\s*\{(.+?)\}\\s?~ui", $search, $m);
print_r($m);
1
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
22.08.2016, 13:02
#'<if \[.*?\]\{.*?\}\{.*?\}\/>'is#
1
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
22.08.2016, 18:50
Цитата Сообщение от Bigeron Посмотреть сообщение
Просто нужно в дальнейшем анализировать переменные в [] и {}
PHP
1
2
3
$str = '<if [значение один]{значение два}{значение три}/>';
preg_match_all("~if\x20\[(?<var1>[^]]*)\]\{(?<var2>[^}]*)\}\{(?<var3>[^}]*)\}\/>~iu", $str, $m);
echo "first var: " . $m['var1'][0] . ", second var: " . $m['var2'][0] . ", third var: " . $m['var3'][0];
http://sandbox.onlinephpfuncti... 4a2adb10c2
1
 Аватар для Bigeron
4 / 4 / 0
Регистрация: 01.02.2013
Сообщений: 139
22.08.2016, 21:06  [ТС]
Цитата Сообщение от Azdeman Посмотреть сообщение
$search = '/<if[любые символы]{любые символы}{любые символы}/>';
preg_match_all("~(?<=<)if\\s*\[(.+?)\]\\s*\{(.+?)\}\\s*\{(.+?)\}\\s?~ui", $search, $m);
print_r($m);
результат
PHP
1
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) )

Цитата Сообщение от mrNTF Посмотреть сообщение
$str = '<if [значение один]{значение два}{значение три}/>';
preg_match_all("~if\x20\[(?<var1>[^]]*)\]\{(?<var2>[^}]*)\}\{(?<var3>[^}]*)\}\/>~iu", $str, $m);
echo "first var: " . $m['var1'][0] . ", second var: " . $m['var2'][0] . ", third var: " . $m['var3'][0];
Странно, версия php 5.5.30 и в результате получаю вот что:

PHP
1
2
3
4
Notice: Undefined offset: 0 in C:\Apache24\htdocs\test.php on line 45
Notice: Undefined offset: 0 in C:\Apache24\htdocs\test.php on line 45
Notice: Undefined offset: 0 in C:\Apache24\htdocs\test.php on line 45
first var: , second var: , third var:

Цитата Сообщение от SergioO Посмотреть сообщение
#'<if \[.*?\]\{.*?\}\{.*?\}\/>'is#

Не совсем понял, что за #' и 'is#
0
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
22.08.2016, 21:50
Цитата Сообщение от Bigeron Посмотреть сообщение
Странно, версия php 5.5.30 и в результате получаю вот что:
Ну вы видели, по ссылке всё норм работает. Закомментируйте строку с echo, пропишите print_r($m); и скиньте, что выведет.
1
 Аватар для Bigeron
4 / 4 / 0
Регистрация: 01.02.2013
Сообщений: 139
23.08.2016, 21:34  [ТС]
Цитата Сообщение от mrNTF Посмотреть сообщение
Ну вы видели, по ссылке всё норм работает. Закомментируйте строку с echo, пропишите print_r($m); и скиньте, что выведет.
Я не сполрю, что работает ... Я сам пробовал на через онлайн конструктор регулярных выражений - тоже работает, а вот у меня как то не хочет правильно запускаться ... )
Array ( [0] => Array ( ) [var1] => Array ( ) [1] => Array ( ) [var2] => Array ( ) [2] => Array ( ) [var3] => Array ( ) [3] => Array ( ) )

Добавлено через 22 часа 6 минут
Есть у кого какие идеи ?

Добавлено через 1 час 3 минуты
PHP
1
/if \[(.*)\]{(.*)}{(.*)}\s*\/>/
https://regex101.com/r/pX8eY7/1
Выражение работает, но не совсем ... почему то цепляет первую квадратную скобку, а затем последнюю ...

Есть у кого идеи, как это подправить ?
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
23.08.2016, 22:54
Лучший ответ Сообщение было отмечено Bigeron как решение

Решение

Цитата Сообщение от Bigeron Посмотреть сообщение
Выражение работает, но не совсем ... почему то цепляет первую квадратную скобку, а затем последнюю ...
Потому что "Жадность фраера губит"
вот так:
https://regex101.com/r/pX8eY7/2
либо флаг "U";
preg_match("~рег.выражение~U");
0
 Аватар для Bigeron
4 / 4 / 0
Регистрация: 01.02.2013
Сообщений: 139
24.08.2016, 02:00  [ТС]
Цитата Сообщение от Azdeman Посмотреть сообщение
Потому что "Жадность фраера губит"
вот так:
Не понял, к чему было это высказывание, но всё равно спасибо за помощь !
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
24.08.2016, 11:43
Цитата Сообщение от Bigeron Посмотреть сообщение
Не понял, к чему было это высказывание
Потому что был жадный захват. Захватывало всё что только можно
Например
PHP
1
2
3
4
$a = "[assddwe][efwefwef]";
preg_match(~\[.+\]~,$a,$m); // думаем то будет [assddwe], а будет захват до последней скобки [assddwe][efwefwef], то есть "жадный" поиск
$a = "[assddwe][efwefwef]";
preg_match(~\[.+?\]~,$a,$m); //а вот так до первой закрывающей скобки [assddwe], "подавливаем Жадность"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2016, 11:43
Помогаю со студенческими работами здесь

Регулярное выражение
Добрый день.Есть строка вот такая Подп - 10К ★ Нужно,чтобы стало вот так Подп - 15 руб ★ Делаю вот так

Регулярное выражение
Есть строка вида:&quot;12345678,54543234,01928374&quot; Числа из восеми цифр идут через запятую. Нужно выражение, которое проверит, что это...

регулярное выражение
Имеем строку http://img.yandex.net/i/www/logo.png нужно вытащить то что между и

Регулярное выражение.
Добрый день! Не могу разобраться с регулярным выражением. Есть строка: &lt;li&gt;&lt;strong&gt;Режиссёр:&lt;/strong&gt; &lt;a...

Регулярное выражение
Вот у меня есть текст $ 0.03 USD как мне оставить только 0.03?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru