Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
develop:qt:input [2021/10/04 04:03] admin |
develop:qt:input [2021/10/04 07:26] (текущий) admin |
||
---|---|---|---|
Строка 25: | Строка 25: | ||
- | ==== QRegExpValidator / QRegularExpressionValidator | + | ==== QRegExpValidator / QRegularExpresionValidator |
----- | ----- | ||
Используется регулярное выражение, | Используется регулярное выражение, | ||
Строка 31: | Строка 31: | ||
- | ===== QRegExp ===== | + | ===== QRegExp |
----- | ----- | ||
+ | **QRegularExpression** является улучшением класса **QRegExp**, | ||
+ | Реализует Perl-совместимые регулярные выражения.\\ | ||
+ | Выражение состоит из двух частей: | ||
+ | |||
+ | **Параметры шаблона** задаются отдельно, | ||
+ | |||
+ | **Тип соответствия**- есть возможность задать тип соответствия (обычный либо частичный). Так же есть еще параметры соответствия (**QRegularExpression :: MatchOption**), | ||
+ | |||
+ | ==== Соответствие ==== | ||
+ | ----- | ||
+ | Выполнить сопоставление можно методом **match()**, | ||
+ | При успешной проверке можно выполнить извлечение найденных **подстрок**, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | /*...*/ | ||
+ | QRegularExpression vReg(" | ||
+ | QRegularExpressionMatch vMatch= vReg.match(" | ||
+ | if(vMatch.hasMatch()) | ||
+ | | ||
+ | /*...*/ | ||
+ | // Еще пример | ||
+ | QRegularExpression vReg(" | ||
+ | QRegularExpressionMatch vMatch= vReg.match(" | ||
+ | if(vMatch.hasMatch()) | ||
+ | { | ||
+ | QString vDay= vMatch.captured(1); | ||
+ | QString vMon= vMatch.captured(2); | ||
+ | QString vYear= vMatch.captured(3); | ||
+ | } | ||
+ | /*...*/ | ||
+ | // Либо именованные части | ||
+ | QRegularExpression vReg(" | ||
+ | QRegularExpressionMatch vMatch= vReg.match(" | ||
+ | if(vMatch.hasMatch()) | ||
+ | { | ||
+ | QString vDay= vMatch.captured(" | ||
+ | QString vMon= vMatch.captured(" | ||
+ | QString vYear= vMatch.captured(" | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Глобальное соответствие ==== | ||
+ | ----- | ||
+ | Поиск всех вхождений выражения в строке. Метод **globalMatch()** возвращает **QRegularExpressionMatchIterator**- т.н. прямой итератор который можно использовать для перебора результатов.\\ | ||
+ | Результат возвращается как объект **QRegularExpressionMatch**.\\ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | QRegularExpression vReg(" | ||
+ | QRegularExpressionMatchIterator i= vReg.globalMatch(" | ||
+ | QStringList vLsWords; | ||
+ | while(i.hasNext()) | ||
+ | { | ||
+ | QRegularExpressionMatch vMatch= i.next(); | ||
+ | QString vWord= vMatch.captured(1); | ||
+ | vLsWords << vWord; | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Частичное соответствие ==== | ||
+ | ----- | ||
+ | Совпадение части строки, | ||
+ | Частичный поиск явно запрашивается, | ||
+ | |||
+ | Для получения используется метод **hasPartialMatch()** т.к. **hasMatch()** вернет false, но запрос частичного совпадения все равно может найти полное совпадение, | ||
+ | |||
+ | Подстроки (**captured()**) так же не возвращаются, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | /*...*/ | ||
+ | QRegularExpression vReg(" | ||
+ | QRegularExpressionMatch vMatch= vReg.match(" | ||
+ | vMatch.hasMatch(); | ||
+ | vMatch.hasPartialMatch(); | ||
+ | vMatch.captured(0); | ||
+ | /*...*/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | **Инкрементальное/ | ||
+ | Используется флаг **QRegularExpression:: | ||
+ | |||
+ | |||
+ | ==== Синтаксические ошибки ==== | ||
+ | ----- | ||
+ | Синтаксические ошибки шаблона можно проверить методом **isValid()**, | ||