QRegExp просто не соответствует! Скажите пожалуйста что я делаю не так - PullRequest
3 голосов
/ 04 ноября 2011

В настоящее время я работаю над приложением Qt C ++ для Mac.Во всем приложении я использую сопоставление с образцом строки довольно часто.При использовании класса QRegExp у меня возникают проблемы с чем-то, чего я просто не понимаю !!!

Мой QRegExp выглядит следующим образом:

QRegExp regEx("M|F\\dS\\d\\d.C\\d\\d", Qt::CaseInsensitive);

Он должен соответствовать шаблонам как«M1S02.C12» или «F4S14.C01» в именах файлов.Это прекрасно работает, как только входные имена файлов, которые должны совпадать, не содержат частей этого шаблона.

Например: мой входной файл называется "testItem_abcd_M1S03.C02_grade3"

regEx.exactMatch("testItem_abcd_M1S03.C02_grade3");

возвращает false, тогда как

regEx.indexIn("testItem_abcd_M1S03.C02_grade3");

возвращает 7, что является позицией «m» в «item».

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

Заранее спасибо, гитара Flowflow

1 Ответ

3 голосов
/ 04 ноября 2011

Проблема в том, что | ограничивает поиск либо M, либо F\dS\d\d.C\d\d.Таким образом, единица m элемента будет соответствовать.

Попробуйте "[MF]\\dS\\d\\d\\.C\\d\\d".
(Примечание: также заменено . на \\., так как одна точка соответствует любому символу)

...