Russian Qt Forum
Ноябрь 22, 2024, 20:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Регулярное выражение  (Прочитано 6460 раз)
Larry
Гость
« : Сентябрь 17, 2013, 13:19 »

Добрый день, форумчане. У меня возникла проблема с составлением регулярного выражения для поиска подстроки в конфиге...Конфиг имеет следующий вид:
AT#RSCRIPT=Config.ini\r\n
\r\n
<<<#----------GPRS---------#\r\n
Необходимо найти и отсечь:
AT#RSCRIPT=Config.ini\r\n
\r\n
<<<
Я написал следующее выражение: ^AT#RSCRIPT=[A-Za-z0-9]+\\.[A-Za-z]+\\r\\n+<* и проверил в notepad++, а вот в программе это не работает...перепробовал разные варианты...проблема в знаке #...Как правильно его экранировать?
Записан
mutineer
Гость
« Ответ #1 : Сентябрь 17, 2013, 13:51 »

Либо убери ^, либо добавь флаг m
Записан
Larry
Гость
« Ответ #2 : Сентябрь 17, 2013, 13:54 »

пробовал и без знака ^...одно и тоже - работать не хочет...А что за флаг m?
Записан
mutineer
Гость
« Ответ #3 : Сентябрь 17, 2013, 13:55 »

многострочный регэксп. Вроде без флага ^ означает начало всего текста, а с ним начало строки
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Сентябрь 17, 2013, 14:08 »

бэкслэш как символ в регулярном выражении внутри си-строки записывается \\\\
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Larry
Гость
« Ответ #5 : Сентябрь 17, 2013, 14:21 »

Решил сократить немного выражение для проверки и ввел всего лишь ^AT - находит и без ^ тоже находит...а вот AT# уже не находит и AT\\\\# тоже не работает... Непонимающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Сентябрь 17, 2013, 14:30 »

решетку экранировать \\#, а \\\\ я имел в виду для \r и \n если они в файле записаны как 2 символа а не как 1
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Larry
Гость
« Ответ #7 : Сентябрь 17, 2013, 14:36 »

спасибо...изменил на AT\\# все также - не работает...что еще может быть? я так понимаю все дело в диезе (#)...а экранировать обратным слэшем не получается...как можно все таки его экранировать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Сентябрь 17, 2013, 20:57 »

ты про \r и \n не объяснил — каждый из них состоит из одного символа (т.е. это специальные символы перевода строки) или это 2 символа (бэкслэш и буква)? если второе, то бэкслэш надо писать как \\\\
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Larry
Гость
« Ответ #9 : Сентябрь 18, 2013, 08:18 »

извините, не смог попасть на форум до сего момента...это специальные символы перевода строки. Я уже перепробовал по всякому, но не добился успеха Непонимающий, но знаю что этому есть простое объяснение...к сожалению пока не нашел причины. Диез экранируется обратным слэшем (насколько я понял, то да, но могу ошибаться)? Просто когда я вводил команду AT\\#, то все также не работало, т.е. вся запарка из-за него...
Записан
_OLEGator_
Гость
« Ответ #10 : Сентябрь 18, 2013, 09:20 »

Код
C++ (Qt)
QString text("test \r\nAT#RSCRIPT \r\n asddad");
QRegExp reg("AT#RSCRIPT");
 
int index = reg.indexIn(text); // =7

Работает корректно.
Записан
Larry
Гость
« Ответ #11 : Сентябрь 18, 2013, 09:40 »

Спасибо большое всем за помощь...это я протупил и конкретно...этот конфиг я считываю из прибора и конечно не учел, что информация по uart идет не одним целым, а частями. Сейчас вывел эту информацию и увидел, что сначала пришло "АТ", а потом еще одна часть и так весь конфиг разделило на 5 частей. Еще раз спасибо. Буду обрабатывать после получения всего файла...
Записан
Larry
Гость
« Ответ #12 : Сентябрь 18, 2013, 14:57 »

Дабы не гадить на форуме :lol: , напишу здесь...Суть вопроса в следующем: есть устройство, которое подключено к ПК. Обмен информацией осуществляется посредством АТ-команд. На устройстве есть питоновские скрипты. Можно получить список файлов, с этим я уже боролся и сейчас получилось выводить все файлы как мне нужно. Теперь мне необходимо сохранять скрипты на ПК, но встретил трудность...если это файл конфига, т.е. он текстовый, то записать данные в файл нет проблем, но если выбран скрипт с расширение .pyo (байткод), то возникают проблемы с его считыванием и сохранением на ПК. Изначально я использую QString, и здесь с конфигами проблем нет, хотел переделать под QByteArray, но не знаю как реализовать разбор файла, т.к. там необходимо вырезать служебную информацию...вырезаю регулярными выражениями в QString, а вот в QByteArray как я понял нельзя работать с регулярными выражениями. Или я ошибаюсь? Подскажите пожалуйста.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 23.