Инструменты пользователя

Инструменты сайта


develop:qt:input

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:qt:input [2021/10/04 05:24]
admin
develop:qt:input [2021/10/04 07:26] (текущий)
admin
Строка 25: Строка 25:
  
  
-==== QRegExpValidator / QRegularExpressionValidator ====+==== QRegExpValidator / QRegularExpresionValidator ====
 ----- -----
 Используется регулярное выражение, для проверки строки.\\ Используется регулярное выражение, для проверки строки.\\
Строка 45: Строка 45:
 ----- -----
 Выполнить сопоставление можно методом **match()**, передав предметную строку, результатом является объект **QRegularExpressionMatch**.\\ Выполнить сопоставление можно методом **match()**, передав предметную строку, результатом является объект **QRegularExpressionMatch**.\\
-При успешной проверке можно выполнить извлечение найденных подстрок, метод **captured()** (0== вся подстрока) (смещение для начала поиска так же работает (match())).\\+При успешной проверке можно выполнить извлечение найденных **подстрок**, метод **captured()** (0== вся подстрока) (смещение для начала поиска так же работает (match())).\\
  
 <details> <details>
Строка 79: Строка 79:
  
  
 +==== Глобальное соответствие ====
 +-----
 +Поиск всех вхождений выражения в строке. Метод **globalMatch()** возвращает **QRegularExpressionMatchIterator**- т.н. прямой итератор который можно использовать для перебора результатов.\\
 +Результат возвращается как объект **QRegularExpressionMatch**.\\
  
 +<details>
 +<summary>:!: Пример: Глобальный поиск и список результатов</summary>
 +<code cpp-qt>
 +    QRegularExpression vReg("(\\w+)");
 +    QRegularExpressionMatchIterator i= vReg.globalMatch("the quick fox");
 +    QStringList vLsWords;
 +    while(i.hasNext())
 +    {
 +        QRegularExpressionMatch vMatch= i.next();
 +        QString vWord= vMatch.captured(1);
 +        vLsWords << vWord;
 +    }
 +</code>
 +</details>
 +
 +
 +==== Частичное соответствие ====
 +-----
 +Совпадение части строки, алгоритм менее эффективный т.к. многие оптимизации не применяются.\\
 +Частичный поиск явно запрашивается, указав соответствующий тип в **match()**/**globalmatch()**.\\
 +
 +Для получения используется метод **hasPartialMatch()** т.к. **hasMatch()** вернет false, но запрос частичного совпадения все равно может найти полное совпадение, тогда **hasMatch()== true** а **hasPartialMatch()== false**. Объект никогда не сообщает о том и о другом соответствии.\\
 +
 +Подстроки (**captured()**) так же не возвращаются, только полная.\\
 +
 +<details>
 +<summary>:!: Пример: Предпочтение полного сопоставления частичному</summary>
 +<code cpp-qt>
 +/*...*/
 +    QRegularExpression vReg("abc\\w+X|def");
 +    QRegularExpressionMatch vMatch= vReg.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch);
 +    vMatch.hasMatch(); // == true
 +    vMatch.hasPartialMatch(); // == false
 +    vMatch.captured(0); // == "def" т.к. это полное соответствие и оно в приоритете 
 +/*...*/
 +</code>
 +</details>
 +
 +**Инкрементальное/сегментное соответствие**- в случае если проверочный текст подается порциями, тогда логика проверки учитывает возможное продолжение текста, что собсна влияет на результат.\\
 +Используется флаг **QRegularExpression::PartialPreferFirstMatch**.\\
 +
 +
 +==== Синтаксические ошибки ====
 +-----
 +Синтаксические ошибки шаблона можно проверить методом **isValid()**, до информацию **errorString()**, так же, смещение **patternErrorOffset()**.\\
  
  
develop/qt/input.1633325051.txt.gz · Последнее изменение: 2021/10/04 05:24 — admin