Мне нужно извлечь некоторые данные из строки с простым синтаксисом. Синтаксис таков:
_IMPORT:[any text] - [HEX number] #[decimal number]
Поэтому я создал регулярное выражение, которое вы можете увидеть ниже в коде:
//SYNTAX: _IMPORT:%1 - %2 #%3
static const QRegExp matchImportLink("^_IMPORT:(.*?) - ([A-Fa-f0-9]+) #([0-9]+)$");
QRegExp importLink(matchImportLink);
QString qtWtf(importLink.pattern());
const int index = importLink.indexIn(mappingName);
qDebug()<< "Input string: "<<mappingName;
qDebug()<< "Regular expression:"<<qtWtf;
qDebug()<< "Result: "<< index;
По какой-то причине это не работает, я получаю этот вывод:
Input string: "_IMPORT:ddd - 92806f0f96a6dea91c37244128f7d00f #0"
Regular expression: "^_IMPORT:(.*?) - ([A-Fa-f0-9]+) #([0-9]+)$"
Result: -1
Я даже пытался удалить якоря ^
и $
, но это не помогло, да и нежелательно. Раздражает то, что это регулярное выражение отлично работает, если я скопирую вывод в regex101.com, как вы можете видеть здесь: https://regex101.com/r/oT6cY3/1
Кто-нибудь может объяснить, что здесь не так? Я наткнулся на ошибку Qt? Я использую Qt 5.6. Есть ли обходной путь для этого?
IMPORT:**(**
и все остальные) для меня выглядят странно. - Я ожидаю, что регулярное выражение будет соответствовать символу(
, которого нет в выражении. Но если у них есть regexp-семантика, просто забудьте мой комментарий. - person Bernhard Heinrich   schedule 15.08.2016(.*?)
на(.*)
помогает, но не знаю почему. Смена движка регулярного выражения тоже не помогает... - person mike.dld   schedule 15.08.2016(.*?)
не является жадным, чтобы предотвратить сопоставление части `- [hex]`. - person Tomáš Zato - Reinstate Monica   schedule 15.08.2016QRegExp
документах... - person Tomáš Zato - Reinstate Monica   schedule 16.08.2016