Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60

Парсинг файла с использованием регулярных выражений

28.02.2014, 20:34. Показов 1682. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток уважаемые форумчане! Есть такая тема: нужно выдернуть из определенного формата информацию. Формат файла следующий:

flag *[имя_флага]:
......определенная информация.......
flag *[имя_флага]:
......определенная информация.......


где имя флага обычно один символ!
Написал такую регулярку
PHP
1
"~(?<=flag\s\*.:)(.*)(?!flag)~s"
но почему-то она не работает! Может кто подскажет, что я делаю не так???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2014, 20:34
Ответы с готовыми решениями:

Экранирование с использованием регулярных выражений
Подскажите пожалуйста: у меня есть файл в формате json. В нем есть куски текста на укр. языке. Внутри текста попадаются слова обрамленные...

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

Выявление url с использованием регулярных выражений
Доброго времени суток!!! Пытаюсь через регулярные выражения выяснить, есть ли в отосланном сообщении ссылка или нет. До этого момента...

11
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
01.03.2014, 11:57
PHP
1
2
3
4
5
6
7
8
9
10
        $stroka='
flag *[имя_флага]:
......определенная информация.......
flag *[имя_флага]:
......определенная информация.......
';
$buf=explode ('flag *',$stroka);
foreach($buf as $row){
    echo trim(substr($row, strpos($row, ':')+1, strlen($stroka))),'<br>';
}
1
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
03.03.2014, 13:09  [ТС]
Не совсем то, что нужно, но все равно спасибо! Там очень сложная структура файла и с регулярками я не стал заморачиваться! Решил все необходимое с помощью строковых функций, дополнительных массивов и т.д.
0
 Аватар для zhibirc
651 / 236 / 77
Регистрация: 18.02.2013
Сообщений: 784
05.03.2014, 20:06
Code
1
"~(?<=flag\s\*.:)(.*)(?!flag)~s"
Цитата Сообщение от necheyhin_a_v Посмотреть сообщение
но почему-то она не работает! Может кто подскажет, что я делаю не так???
Позиционная проверка (в данном случае негативная/позитивная ретроспективная/опережающая проверки, негативный/позитивный просмотр назад/вперед) - это проверка определенной позиции в строке, то есть ищется совпадение/несовпадение именно с позицией, а не с символом. Соответственно, фрагмент (набор каких-то символов), который вы хотите получить в переменной $idx, через $matches[idx] или механизм обратных ссылок (\1) должен быть заключен не в конструкцию такой проверки.

Возможно я в чем-то ошибаюсь, буду благодарен, если кто-то меня аргументированно поправит.
0
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
05.03.2014, 21:18  [ТС]
Цитата Сообщение от !i Посмотреть сообщение
Позиционная проверка (в данном случае негативная/позитивная ретроспективная/опережающая проверки, негативный/позитивный просмотр назад/вперед) - это проверка определенной позиции в строке, то есть ищется совпадение/несовпадение именно с позицией, а не с символом. Соответственно, фрагмент (набор каких-то символов), который вы хотите получить в переменной $idx, через $matches[idx] или механизм обратных ссылок (\1) должен быть заключен не в конструкцию такой проверки.

Если я правильно понял ретроспективные/опережающие проверки, то я указал в регулярном выражении, что слева должна стоять flag\s\*.: конструкция, а справа не должно стоять слово flag
0
Невнимательный
 Аватар для ft4l
2835 / 1261 / 357
Регистрация: 08.02.2013
Сообщений: 7,341
Записей в блоге: 2
06.03.2014, 07:23
Возможно я в чем-то ошибаюсь
в корне :)
это проверка определенной позиции в строке
это проверка совпадения справа или слева текущей позиции
$1..n может захватывается несмотря на то что может не содержаться в $0 ($& in perl)
0
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
06.03.2014, 08:47  [ТС]
И все-таки вопрос остается открытым!!! Почему не работает конструкция указанная мною в теме???
0
Невнимательный
 Аватар для ft4l
2835 / 1261 / 357
Регистрация: 08.02.2013
Сообщений: 7,341
Записей в блоге: 2
06.03.2014, 09:07
(.*) из-за жадности захватывает всё до конца файла ?

(.*?) ...

Добавлено через 11 минут
и тогда вместо ... что-то вроде (?=^flag|$)~ms
или \Z вместо $
0
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
06.03.2014, 09:09  [ТС]
Цитата Сообщение от ft4l Посмотреть сообщение
(.*) из-за жадности захватывает всё до конца файла ?
(.*?) ...
Добавлено через 11 минут
и тогда вместо ... что-то вроде (?=^flag|$)~ms
Пробовал урезать жадность, но в таком случае он берет только один символ!
0
Невнимательный
 Аватар для ft4l
2835 / 1261 / 357
Регистрация: 08.02.2013
Сообщений: 7,341
Записей в блоге: 2
06.03.2014, 09:10
никогда не понимал двойные кавычки для выражений
0
3 / 3 / 1
Регистрация: 18.12.2012
Сообщений: 60
06.03.2014, 13:04  [ТС]
Цитата Сообщение от ft4l Посмотреть сообщение
никогда не понимал двойные кавычки для выражений
Крайние скобки в моем случае используются для ретроспективной и опережающей проверки, а центральные для сохранения результата, удовлетворяющего поиску!
0
Невнимательный
 Аватар для ft4l
2835 / 1261 / 357
Регистрация: 08.02.2013
Сообщений: 7,341
Записей в блоге: 2
07.03.2014, 02:10
я не совсем об этом... извиняюсь, часто пропадаю
просто в 'строке' трансформируется только \\ (экранированый слэш)
, например \x5a останется как есть
а если писать как "строка", приходится угадывать трансформирует-ли php другие последовательности с \ или с $
, хоть и не многое может совпасть, но тоже лишние условности

а скобки (.*?) в данном случае просто копия $0 в $1, немного больше памяти + копирование
но, (?<=...) тоже может быть тоже не всегда оправдано перед .*
и выражение в (?<=...) или(?<!...)может быть только фиксированной длинны
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2014, 02:10
Помогаю со студенческими работами здесь

PHP задача с использованием строк, регулярных выражений и символов
Дана строка состоящая из строк, разделенных символами, которые перечислены во 2 строке. Обе строки вводятся с использованием элементов...

Парсинг html кода с использованием регулярных выражений (в частности boost.regex)
Вечер добрый, уважаемые форумчане! В общем то тема избитая, читал я по ней много, но из темы в тему - только какие то второстепенные...

Парсинг файла с применением регулярных выражений
Приветствую всех! Ребята, подскажите. Есть файл со следующим содержимым. Необходимо с помощью регулярных выражений извлечь значения ...

Парсинг логов с использованием регулярных выражений на Python и их упаковка в структуру данных словарь словарей
Требуется: Создать из последовательности логов словарь, где ключ - таймстемп, а value - другой словарь, в котором ключи - все группы,...

Задача по обработке файла с использованием регулярных выражений
Пытаюсь решить задачу: Задан log-file с описанием четырёхдневных курсов в следующем виде: 09:20 Введение 11:00 Упражнения ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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