LINUX.ORG.RU

[QT] не работает регэксп

 


0

0

Считал из файла 14 байт, вот коды считанных символов (char):
1  1  2  1  1  1  1  1  1  1  1  1 -25  1

Имеется регэксп: "\x0001\x00DA.[\x0001\x0002]"

Почему же сопоставление 

QString regexp_str = "\x0001\x00DA.[\x0001\x0002]";
QRegExp regexp;
regexp.setPattern(regexp_str);
regexp.setCaseSensitive(true);

QString read = ...; // вышеуказанная строка 14 символов

if(!regexp_str.isEmpty() && !regexp_str.isNull())
		if(read.find(regexp) == 0)
				printf("found\n");

приводит к успеху (печатается "found") ? 

В тоже время

if(!regexp_str.isEmpty() && !regexp_str.isNull())
		if(regexp.exactMatch(read))
				printf("found\n");
				
всегда приводит к провалу ??


куйня какая-то в этом мандрейке. перекомпилил - всё работает. тьфу. :)

Krasu
() автор топика

Потому что доку нужно читать :)
--
exactMatch Returns TRUE if str is matched exactly by this regular expression; otherwise returns FALSE.
--
А Ваша входная строка явно не совпадает в точности с \x01\xDA.[\x01\x02]

Скажите, кстати, а какой глубокий смысл использования регэкспjd для явно non-printable символов?

phoenix ★★★★
()
Ответ на: комментарий от phoenix

1) при "matched exactly" по мойму лишние символы в строке не учитываются
2) зачем надо - парсить хедеры у изображений.

Krasu
() автор топика
Ответ на: комментарий от Krasu

1) У доки на этот счет другое мнение:
--
For example, if the regular expression is blue, then exactMatch() returns TRUE only for input blue. For inputs bluebell, blutak and lightblue, exactMatch() returns FALSE and matchedLength() will return 4, 3 and 0 respectively.
--
2) Что за страшные изображения такие, просто в структуру считать заголовок уже не судьба?

phoenix ★★★★
()
Ответ на: комментарий от phoenix

1) Гм, действительно ;)
2) "Да ты я вижу совсем не в курсе" (C) "Сп..здили", Гоблин
что я пишу просмотрщик изображений. каждый формат поддерживается отдельной либой, в ней также имеется регэксп для данного конкретного изображения.

В программе счёлкаю по файлу - считываются 14 байт, и по ренэкспу находится нужная библиотека. Всё просто :)

Krasu
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.