QRegularExpression Class
La clase QRegularExpression proporciona concordancia de patrones utilizando expresiones regulares. Más...
| Cabecera: | #include <QRegularExpression> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Lista de todos los miembros, incluidos los heredados
- Miembros obsoletos
- QRegularExpression es parte de Clases implícitamente compartidas y Clases para datos de cadena.
Esta clase es igualdad-comparable.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos públicos
| enum | MatchOption { NoMatchOption, AnchoredMatchOption, AnchorAtOffsetMatchOption, DontCheckSubjectStringMatchOption } |
| flags | MatchOptions |
| enum | MatchType { NormalMatch, PartialPreferCompleteMatch, PartialPreferFirstMatch, NoMatch } |
| enum | PatternOption { NoPatternOption, CaseInsensitiveOption, DotMatchesEverythingOption, MultilineOption, ExtendedPatternSyntaxOption, …, UseUnicodePropertiesOption } |
| flags | PatternOptions |
(since 6.0) enum | WildcardConversionOption { DefaultWildcardConversion, UnanchoredWildcardConversion, NonPathWildcardConversion } |
| flags | WildcardConversionOptions |
Funciones públicas
| QRegularExpression() | |
| QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = NoPatternOption) | |
| QRegularExpression(const QRegularExpression &re) | |
(since 6.1) | QRegularExpression(QRegularExpression &&re) |
| ~QRegularExpression() | |
| int | captureCount() const |
| QString | errorString() const |
| QRegularExpressionMatchIterator | globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
(since 6.5) QRegularExpressionMatchIterator | globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
| bool | isValid() const |
| QRegularExpressionMatch | match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
(since 6.5) QRegularExpressionMatch | matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const |
| QStringList | namedCaptureGroups() const |
| void | optimize() const |
| QString | pattern() const |
| qsizetype | patternErrorOffset() const |
| QRegularExpression::PatternOptions | patternOptions() const |
| void | setPattern(const QString &pattern) |
| void | setPatternOptions(QRegularExpression::PatternOptions options) |
| void | swap(QRegularExpression &other) |
| QRegularExpression & | operator=(QRegularExpression &&re) |
| QRegularExpression & | operator=(const QRegularExpression &re) |
Miembros públicos estáticos
| QString | anchoredPattern(QStringView expression) |
| QString | anchoredPattern(const QString &expression) |
| QString | escape(QStringView str) |
| QString | escape(const QString &str) |
(since 6.0) QRegularExpression | fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion) |
| QString | wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion) |
| QString | wildcardToRegularExpression(const QString &pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion) |
Relacionados No miembros
| size_t | qHash(const QRegularExpression &key, size_t seed = 0) |
| bool | operator!=(const QRegularExpression &lhs, const QRegularExpression &rhs) |
| QDataStream & | operator<<(QDataStream &out, const QRegularExpression &re) |
| QDebug | operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions) |
| QDebug | operator<<(QDebug debug, const QRegularExpression &re) |
| bool | operator==(const QRegularExpression &lhs, const QRegularExpression &rhs) |
| QDataStream & | operator>>(QDataStream &in, QRegularExpression &re) |
Descripción detallada
Las expresiones regulares, o regexps, son una herramienta muy potente para manejar cadenas y textos. Esto es útil en muchos contextos, p. ej,
| Validación | Una regexp puede comprobar si una subcadena cumple ciertos criterios, por ejemplo, si es un número entero o no contiene espacios en blanco. |
| Búsqueda | Una regexp permite buscar patrones más potentes que una simple subcadena. Por ejemplo, puede buscar una de las palabras mail, letter o correspondence, pero ninguna de las palabras email, mailman, mailer, letterbox, etc. |
| Buscar y reemplazar | Una regexp puede sustituir todas las apariciones de una subcadena por una subcadena diferente, por ejemplo, sustituir todas las apariciones de & por & excepto si & ya va seguida de un amp;. |
| División de cadenas | Una expresión regular puede utilizarse para identificar dónde debe dividirse una cadena, por ejemplo, para dividir cadenas delimitadas por tabuladores. |
Este documento no es en absoluto una referencia completa a la concordancia de patrones mediante expresiones regulares, y las siguientes partes requerirán que el lector tenga algunos conocimientos básicos sobre las expresiones regulares tipo Perl y su sintaxis de patrones.
Buenas referencias sobre expresiones regulares incluyen:
- Mastering Regular Expressions (Third Edition) por Jeffrey E. F. Friedl, ISBN 0-596-52812-4;
- la página man pcrepattern(3), que describe la sintaxis de patrones soportada por PCRE (la implementación de referencia de expresiones regulares compatibles con Perl);
- la documentación sobre expresiones regulares de Perl y el tutorial sobre expresiones regulares de Perl.
Introducción
QRegularExpression implementa expresiones regulares compatibles con Perl. Es totalmente compatible con Unicode. Para una visión general de la sintaxis de las expresiones regulares soportadas por QRegularExpression, por favor consulte la página man pcrepattern(3) antes mencionada. Una expresión regular se compone de dos cosas: una cadena patrón y un conjunto de opciones de patrón que cambian el significado de la cadena patrón.
Puede establecer la cadena patrón pasando una cadena al constructor de QRegularExpression:
QRegularExpression re("a pattern");
Esto establece la cadena de patrón a a pattern. También puede utilizar la función setPattern() para establecer un patrón en un objeto QRegularExpression existente:
QRegularExpression re; re.setPattern("another pattern");
Tenga en cuenta que debido a las reglas de cadenas literales de C++, debe escapar todas las barras invertidas dentro de la cadena de patrón con otra barra invertida:
// matches two digits followed by a space and a word QRegularExpression re("\\d\\d \\w+"); // matches a backslash QRegularExpression re2("\\\\");
Alternativamente, puede utilizar una cadena literal sin procesar, en cuyo caso no necesita escapar las barras invertidas en el patrón, todos los caracteres entre R"(...)" se consideran caracteres sin procesar. Como puede ver en el siguiente ejemplo, esto simplifica la escritura de patrones:
// matches two digits followed by a space and a word QRegularExpression re(R"(\d\d \w+)");
La función pattern() devuelve el patrón actualmente establecido para un objeto QRegularExpression:
QRegularExpression re("a third pattern"); QString pattern = re.pattern(); // pattern == "a third pattern"
Opciones de patrón
El significado de la cadena del patrón puede modificarse estableciendo una o más opciones de patrón. Por ejemplo, es posible configurar un patrón para que no distinga entre mayúsculas y minúsculas configurando QRegularExpression::CaseInsensitiveOption.
Puede establecer las opciones pasándolas al constructor de QRegularExpression, como en:
// matches "Qt rocks", but also "QT rocks", "QT ROCKS", "qT rOcKs", etc. QRegularExpression re("Qt rocks", QRegularExpression::CaseInsensitiveOption);
Alternativamente, puede utilizar la función setPatternOptions() en un QRegularExpressionObject existente:
QRegularExpression re("^\\d+$"); re.setPatternOptions(QRegularExpression::MultilineOption); // re matches any line in the subject string that contains only digits (but at least one)
Es posible obtener las opciones de patrón actualmente establecidas en un objeto QRegularExpression utilizando la función patternOptions():
QRegularExpression re = QRegularExpression("^two.*words$", QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption); QRegularExpression::PatternOptions options = re.patternOptions(); // options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
Consulte la documentación del enum QRegularExpression::PatternOption para obtener más información sobre cada opción de patrón.
Tipo de coincidencia y opciones de coincidencia
Los dos últimos argumentos de las funciones match() y globalMatch() establecen el tipo de coincidencia y las opciones de coincidencia. El tipo de coincidencia es un valor del enum QRegularExpression::MatchType; el algoritmo de coincidencia "tradicional" se elige utilizando el tipo de coincidencia NormalMatch (por defecto). También es posible activar la coincidencia parcial de la expresión regular con una cadena de asunto: consulte la sección partial matching para obtener más detalles.
Las opciones de coincidencia son un conjunto de uno o más valores de QRegularExpression::MatchOption. Modifican el modo en que se realiza una coincidencia específica de una expresión regular con una cadena de asunto. Consulte la documentación de QRegularExpression::MatchOption para obtener más detalles.
Coincidencia normal
Para realizar una coincidencia puede simplemente invocar la función match() pasando una cadena con la que realizar la coincidencia. Esta cadena se denomina cadena de asunto. El resultado de la función match() es un objeto QRegularExpressionMatch que puede utilizarse para inspeccionar los resultados de la comparación. Por ejemplo:
// match two digits followed by a space and a word QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("abc123 def"); bool hasMatch = match.hasMatch(); // true
Si una coincidencia tiene éxito, el grupo de captura (implícito) número 0 puede utilizarse para recuperar la subcadena coincidente con el patrón completo (véase también la sección sobre extracting captured substrings):
QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("abc123 def"); if (match.hasMatch()) { QString matched = match.captured(0); // matched == "23 def" // ... }
También es posible iniciar una coincidencia en un desplazamiento arbitrario dentro de la cadena de asunto pasando el desplazamiento como argumento de la función match(). En el siguiente ejemplo "12 abc" no coincide porque la coincidencia se inicia en el desplazamiento 1:
QRegularExpression re("\\d\\d \\w+"); QRegularExpressionMatch match = re.match("12 abc 45 def", 1); if (match.hasMatch()) { QString matched = match.captured(0); // matched == "45 def" // ... }
Extracción de las subcadenas capturadas
El objeto QRegularExpressionMatch contiene también información sobre las subcadenas capturadas por los grupos de captura en la cadena patrón. La función captured() devolverá la cadena capturada por el n-ésimo grupo de captura:
QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$"); QRegularExpressionMatch match = re.match("08/12/1985"); if (match.hasMatch()) { QString day = match.captured(1); // day == "08" QString month = match.captured(2); // month == "12" QString year = match.captured(3); // year == "1985" // ... }
Los grupos de captura del patrón se numeran empezando por 1, y el grupo de captura implícito 0 se utiliza para capturar la subcadena que coincide con todo el patrón.
También es posible recuperar los desplazamientos inicial y final (dentro de la cadena de asunto) de cada subcadena capturada, utilizando las funciones capturedStart() y capturedEnd():
QRegularExpression re("abc(\\d+)def"); QRegularExpressionMatch match = re.match("XYZabc123defXYZ"); if (match.hasMatch()) { int startOffset = match.capturedStart(1); // startOffset == 6 int endOffset = match.capturedEnd(1); // endOffset == 9 // ... }
Todas estas funciones tienen una sobrecarga que toma un QString como parámetro para extraer las subcadenas capturadas con nombre. Por ejemplo:
QRegularExpression re("^(?<date>\\d\\d)/(?<month>\\d\\d)/(?<year>\\d\\d\\d\\d)$"); QRegularExpressionMatch match = re.match("08/12/1985"); if (match.hasMatch()) { QString date = match.captured("date"); // date == "08" QString month = match.captured("month"); // month == "12" QString year = match.captured("year"); // year == 1985 }
Coincidencia global
Laconcordancia global es útil para encontrar todas las apariciones de una expresión regular dada dentro de una cadena de asunto. Supongamos que queremos extraer todas las palabras de una cadena dada, donde una palabra es una subcadena que coincide con el patrón \w+.
QRegularExpression::globalMatch devuelve un QRegularExpressionMatchIterator, que es un iterador hacia adelante de tipo Java que puede utilizarse para iterar sobre los resultados. Por ejemplo:
QRegularExpression re("(\\w+)"); QRegularExpressionMatchIterator i = re.globalMatch("the quick fox");
Como es un iterador tipo Java, el QRegularExpressionMatchIterator apuntará inmediatamente antes del primer resultado. Cada resultado se devuelve como un objeto QRegularExpressionMatch. La función hasNext() devolverá true si hay al menos un resultado más, y next() devolverá el siguiente resultado y hará avanzar el iterador. Continuando con el ejemplo anterior:
QStringList words; while (i.hasNext()) { QRegularExpressionMatch match = i.next(); QString word = match.captured(1); words << word; } // words contains "the", "quick", "fox"
También puede utilizar peekNext() para obtener el siguiente resultado sin hacer avanzar el iterador.
También es posible utilizar simplemente el resultado de QRegularExpression::globalMatch en un bucle for basado en rangos, por ejemplo así:
// using a raw string literal, R"(raw_characters)", to be able to use "\w" // without having to escape the backslash as "\\w" QRegularExpression re(R"(\w+)"); QString subject("the quick fox"); for (const QRegularExpressionMatch &match : re.globalMatch(subject)) { // ... }
Es posible pasar un desplazamiento inicial y una o más opciones de coincidencia a la función globalMatch(), exactamente igual que la coincidencia normal con match().
Comparación parcial
Se obtiene una coincidencia parcial cuando se alcanza el final de la cadena de asunto, pero se necesitan más caracteres para completar con éxito la coincidencia. Tenga en cuenta que una coincidencia parcial suele ser mucho más ineficiente que una coincidencia normal porque no se pueden emplear muchas optimizaciones del algoritmo de coincidencia.
Una coincidencia parcial debe solicitarse explícitamente especificando un tipo de coincidencia de PartialPreferCompleteMatch o PartialPreferFirstMatch al llamar a QRegularExpression::match o QRegularExpression::globalMatch. Si se encuentra una coincidencia parcial, al llamar a la función hasMatch() sobre el objeto QRegularExpressionMatch devuelto por match() se obtendrá false, pero hasPartialMatch() devolverá true.
Cuando se encuentra una coincidencia parcial, no se devuelve ninguna subcadena capturada, y el grupo de captura (implícito) 0 correspondiente a la coincidencia completa captura la subcadena parcialmente coincidente de la cadena de asunto.
Tenga en cuenta que pedir una coincidencia parcial aún puede conducir a una coincidencia completa, si se encuentra alguna; en este caso, hasMatch() devolverá true y hasPartialMatch() false. Nunca ocurre que un QRegularExpressionMatch informe tanto de una coincidencia parcial como de una completa.
Las coincidencias parciales son útiles principalmente en dos situaciones: la validación de la entrada del usuario en tiempo real y las coincidencias incrementales/multisegmento.
Validación de la entrada del usuario
Supongamos que queremos que el usuario introduzca una fecha en un formato específico, por ejemplo "MMM dd, aaaa". Podemos comprobar la validez de la entrada con un patrón como:
^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d\d?, \d\d\d\d$
(Este patrón no detecta los días no válidos, pero vamos a mantenerlo para los propósitos del ejemplo).
Nos gustaría validar la entrada con esta expresión regular mientras el usuario la teclea, de forma que podamos informar de un error en la entrada tan pronto como se cometa (por ejemplo, el usuario tecleó la tecla equivocada). Para ello debemos distinguir tres casos:
- la entrada no puede coincidir con la expresión regular;
- la entrada coincide con la expresión regular;
- la entrada no coincide con la expresión regular en este momento, pero lo hará si se le añaden más caracteres.
Tenga en cuenta que estos tres casos representan exactamente los posibles estados de QValidator (véase el enum QValidator::State ).
En particular, en el último caso queremos que el motor de expresión regular informe de una coincidencia parcial: estamos comparando con éxito el patrón con la cadena de asunto, pero la coincidencia no puede continuar porque se ha encontrado el final del asunto. Tenga en cuenta, sin embargo, que el algoritmo de coincidencia debe continuar y probar todas las posibilidades, y en caso de que se encuentre una coincidencia completa (no parcial), entonces ésta debe ser reportada, y la cadena de entrada aceptada como totalmente válida.
Este comportamiento se implementa mediante el tipo de coincidencia PartialPreferCompleteMatch. Por ejemplo:
QString pattern("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d?, \\d\\d\\d\\d$"); QRegularExpression re(pattern); QString input("Jan 21,"); QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Si al cotejar la misma expresión regular con la cadena de asunto se obtiene una coincidencia completa, se informa de ello como de costumbre:
QString input("Dec 8, 1985"); QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // true bool hasPartialMatch = match.hasPartialMatch(); // false
Otro ejemplo con un patrón diferente, que muestra el comportamiento de preferir una coincidencia completa a una parcial:
QRegularExpression re("abc\\w+X|def"); QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // true bool hasPartialMatch = match.hasPartialMatch(); // false QString captured = match.captured(0); // captured == "def"
En este caso, el sub-patrón abc\\w+X coincide parcialmente con la cadena de asunto; sin embargo, el sub-patrón def coincide completamente con la cadena de asunto, y por lo tanto se informa de una coincidencia completa.
Si se encuentran varias coincidencias parciales al realizar la búsqueda (pero ninguna coincidencia completa), el objeto QRegularExpressionMatch informará de la primera que se encuentre. Por ejemplo:
QRegularExpression re("abc\\w+X|defY"); QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true QString captured = match.captured(0); // captured == "abcdef"
Coincidencia incremental/multisegmento
La concordancia incremental es otro caso de uso de la concordancia parcial. Supongamos que queremos encontrar las ocurrencias de una expresión regular dentro de un texto grande (es decir, las subcadenas que coinciden con la expresión regular). Para ello, nos gustaría "alimentar" los motores de expresiones regulares con el texto en trozos más pequeños. El problema obvio es qué ocurre si la subcadena que coincide con la expresión regular abarca dos o más trozos.
En este caso, el motor de expresión regular debería informar de una coincidencia parcial, para que podamos volver a coincidir añadiendo nuevos datos y (finalmente) obtener una coincidencia completa. Esto implica que el motor de expresión regular puede suponer que hay otros caracteres más allá del final de la cadena de asunto. Esto no debe tomarse al pie de la letra: el motor nunca intentará acceder a ningún carácter después del último del asunto.
QRegularExpression implementa este comportamiento cuando utiliza el tipo de coincidencia PartialPreferFirstMatch. Este tipo de coincidencia informa de una coincidencia parcial tan pronto como se encuentra, y no se intentan otras alternativas de coincidencia (aunque pudieran conducir a una coincidencia completa). Por ejemplo:
QRegularExpression re("abc|ab"); QRegularExpressionMatch match = re.match("ab", 0, QRegularExpression::PartialPreferFirstMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Esto sucede porque al coincidir con la primera rama del operador de alternancia se encuentra una coincidencia parcial, y por lo tanto la coincidencia se detiene, sin intentar la segunda rama. Otro ejemplo:
QRegularExpression re("abc(def)?"); QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Esto muestra lo que podría parecer un comportamiento contraintuitivo de los cuantificadores: como ? es codicioso, entonces el motor intenta primero continuar la coincidencia después de haber coincidido con "abc"; pero entonces la coincidencia llega al final de la cadena de asunto, y por lo tanto se informa de una coincidencia parcial. Esto es aún más sorprendente en el siguiente ejemplo:
QRegularExpression re("(abc)*"); QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch); bool hasMatch = match.hasMatch(); // false bool hasPartialMatch = match.hasPartialMatch(); // true
Es fácil entender este comportamiento si recordamos que el motor espera que la cadena de asunto sea sólo una subcadena del texto completo en el que buscamos una coincidencia (es decir, como decíamos antes, que el motor asume que hay otros caracteres más allá del final de la cadena de asunto).
Dado que el cuantificador * es codicioso, informar de una coincidencia completa podría ser un error, porque después del asunto actual "abc" puede haber otras ocurrencias de "abc". Por ejemplo, el texto completo podría haber sido "abcabcX", y por tanto la coincidencia correcta a informar (en el texto completo) habría sido "abcabc"; al coincidir sólo con el "abc" inicial obtenemos en cambio una coincidencia parcial.
Tratamiento de errores
Es posible que un objeto QRegularExpression no sea válido debido a errores de sintaxis en la cadena del patrón. La función isValid() devolverá true si la expresión regular es válida, o false en caso contrario:
QRegularExpression invalidRe("(unmatched|parenthesis"); bool isValid = invalidRe.isValid(); // false
Puede obtener más información sobre el error específico llamando a la función errorString(); además, la función patternErrorOffset() devolverá el desplazamiento dentro de la cadena de patrones
QRegularExpression invalidRe("(unmatched|parenthesis"); if (!invalidRe.isValid()) { QString errorString = invalidRe.errorString(); // errorString == "missing )" int errorOffset = invalidRe.patternErrorOffset(); // errorOffset == 22 // ... }
Si se intenta una coincidencia con una QRegularExpression inválida, entonces el objeto QRegularExpressionMatch devuelto tampoco será válido (es decir, su función isValid() devolverá false). Lo mismo ocurre si se intenta una coincidencia global.
Características de las expresiones regulares no compatibles con Perl
QRegularExpression no soporta todas las características disponibles en las expresiones regulares compatibles con Perl. La más notable es el hecho de que los nombres duplicados para capturar grupos no están soportados, y su uso puede llevar a un comportamiento indefinido.
Esto puede cambiar en una futura versión de Qt.
Depurando código que usa QRegularExpression
QRegularExpression utiliza internamente un compilador justo a tiempo (JIT) para optimizar la ejecución del algoritmo de concordancia. El JIT hace un uso extensivo de código auto-modificable, que puede hacer que herramientas de depuración como Valgrind se bloqueen. Debes habilitar todas las comprobaciones de código auto-modificable si quieres depurar programas usando QRegularExpression (por ejemplo, la opción de línea de comandos --smc-check de Valgrind). La desventaja de habilitar estas comprobaciones es que tu programa se ejecutará considerablemente más lento.
Para evitarlo, el JIT está deshabilitado por defecto si compilas Qt en modo depuración. Es posible anular el valor por defecto y activar o desactivar el uso del JIT (tanto en modo depuración como en modo liberación) estableciendo la variable de entorno QT_ENABLE_REGEXP_JIT a un valor distinto de cero o cero respectivamente.
Véase también QRegularExpressionMatch y QRegularExpressionMatchIterator.
Documentación de tipos de miembros
enum QRegularExpression::MatchOption
banderas QRegularExpression::MatchOptions
| Constante | Valor | Descripción |
|---|---|---|
QRegularExpression::NoMatchOption | 0x0000 | No se establecen opciones de coincidencia. |
QRegularExpression::AnchoredMatchOption | AnchorAtOffsetMatchOption | Utilice AnchorAtOffsetMatchOption en su lugar. |
QRegularExpression::AnchorAtOffsetMatchOption | 0x0001 | La coincidencia se limita a comenzar exactamente en el desplazamiento pasado a match() para tener éxito, incluso si la cadena del patrón no contiene ningún metacarácter que ancle la coincidencia en ese punto. Tenga en cuenta que pasar esta opción no ancla el final de la coincidencia al final del asunto; si desea anclar completamente una expresión regular, utilice anchoredPattern(). Este valor enum se ha introducido en Qt 6.0. |
QRegularExpression::DontCheckSubjectStringMatchOption | 0x0002 | No se comprueba la validez UTF-16 de la cadena de asunto antes de intentar una coincidencia. Utilice esta opción con extrema precaución, ya que intentar hacer coincidir una cadena inválida puede bloquear el programa y/o constituir un problema de seguridad. Este valor enum ha sido introducido en Qt 5.4. |
El tipo MatchOptions es un typedef para QFlags<MatchOption>. Almacena una combinación OR de valores MatchOption.
enum QRegularExpression::MatchType
El enum MatchType define el tipo de coincidencia que debe intentarse con la cadena de asunto.
| Constante | Valor | Descripción |
|---|---|---|
QRegularExpression::NormalMatch | 0 | Se realiza una coincidencia normal. |
QRegularExpression::PartialPreferCompleteMatch | 1 | La cadena del patrón se compara parcialmente con la cadena del asunto. Si se encuentra una coincidencia parcial, se registra y se prueban otras alternativas de coincidencia como de costumbre. Si se encuentra una coincidencia completa, entonces se prefiere a la coincidencia parcial; en este caso sólo se informa de la coincidencia completa. Si, por el contrario, no se encuentra ninguna coincidencia completa (sino sólo parcial), entonces se informa de la coincidencia parcial. |
QRegularExpression::PartialPreferFirstMatch | 2 | La cadena del patrón se compara parcialmente con la cadena del asunto. Si se encuentra una coincidencia parcial, la búsqueda se detiene y se notifica la coincidencia parcial. En este caso, no se prueban otras alternativas (que podrían conducir a una coincidencia completa). Además, este tipo de coincidencia supone que la cadena de asunto es sólo una subcadena de un texto más amplio, y que (en este texto) hay otros caracteres más allá del final de la cadena de asunto. Esto puede dar lugar a resultados sorprendentes; véase la discusión en la sección partial matching para más detalles. |
QRegularExpression::NoMatch | 3 | No se realiza ninguna coincidencia. Este valor se devuelve como el tipo de coincidencia por defecto construido QRegularExpressionMatch o QRegularExpressionMatchIterator. Utilizar este tipo de coincidencia no es muy útil para el usuario, ya que nunca se produce ninguna coincidencia. Este valor enum ha sido introducido en Qt 5.1. |
enum QRegularExpression::PatternOption
flags QRegularExpression::PatternOptions
El enum PatternOption define modificadores de la forma en que debe interpretarse la cadena del patrón, y por tanto la forma en que el patrón coincide con una cadena de asunto.
| Constante | Valor | Descripción |
|---|---|---|
QRegularExpression::NoPatternOption | 0x0000 | No se establecen opciones de patrón. |
QRegularExpression::CaseInsensitiveOption | 0x0001 | El patrón debe coincidir con la cadena de asunto sin distinguir mayúsculas de minúsculas. Esta opción se corresponde con el modificador /i de las expresiones regulares de Perl. |
QRegularExpression::DotMatchesEverythingOption | 0x0002 | El metacarácter punto (.) de la cadena del patrón puede coincidir con cualquier carácter de la cadena del asunto, incluidas las nuevas líneas (normalmente, el punto no coincide con las nuevas líneas). Esta opción se corresponde con el modificador /s de las expresiones regulares de Perl. |
QRegularExpression::MultilineOption | 0x0004 | Los metacaracteres intercalado (^) y dólar ($) de la cadena del patrón pueden coincidir, respectivamente, inmediatamente después e inmediatamente antes de cualquier nueva línea de la cadena del asunto, así como al principio y al final de la cadena del asunto. Esta opción se corresponde con el modificador /m de las expresiones regulares de Perl. |
QRegularExpression::ExtendedPatternSyntaxOption | 0x0008 | Cualquier espacio en blanco en la cadena patrón que no esté escapado y fuera de una clase de caracteres se ignora. Además, un punto no escapado(#) fuera de una clase de caracteres hace que se ignoren todos los caracteres siguientes, hasta la primera nueva línea (incluida). Esto se puede utilizar para aumentar la legibilidad de una cadena patrón, así como para poner comentarios dentro de expresiones regulares; esto es particularmente útil si la cadena patrón se carga desde un fichero o la escribe el usuario, porque en código C++ siempre es posible utilizar las reglas para literales de cadena para poner comentarios fuera de la cadena patrón. Esta opción corresponde al modificador /x en las expresiones regulares de Perl. |
QRegularExpression::InvertedGreedinessOption | 0x0010 | La codicia de los cuantificadores se invierte: *, +, ?, {m,n}, etc. se vuelven perezosos, mientras que sus versiones perezosas (*?, +?, ??, {m,n}?, etc.) se vuelven codiciosas. No existe un equivalente para esta opción en las expresiones regulares de Perl. |
QRegularExpression::DontCaptureOption | 0x0020 | Los grupos de captura sin nombre no capturan subcadenas; los grupos de captura con nombre siguen funcionando según lo previsto, así como el grupo de captura implícito número 0 correspondiente a la coincidencia completa. No existe un equivalente para esta opción en las expresiones regulares de Perl. |
QRegularExpression::UseUnicodePropertiesOption | 0x0040 | El significado de las clases de caracteres \w, \d, etc., así como el de sus equivalentes (\W, \D, etc.), pasa de coincidir únicamente con caracteres ASCII a coincidir con cualquier carácter con la propiedad Unicode correspondiente. Por ejemplo, \d pasa a coincidir con cualquier carácter con la propiedad Nd (dígito decimal) de Unicode; \w pasa a coincidir con cualquier carácter con la propiedad L (letra) o N (dígito) de Unicode, más el guión bajo, y así sucesivamente. Esta opción corresponde al modificador /u en las expresiones regulares de Perl. |
El tipo PatternOptions es un typedef para QFlags<PatternOption>. Almacena una combinación OR de valores PatternOption.
[since 6.0] enum QRegularExpression::WildcardConversionOption
flags QRegularExpression::WildcardConversionOptions
El enum WildcardConversionOption define modificadores de la forma en que un patrón glob comodín se convierte en un patrón de expresión regular.
| Constante | Valor | Descripción |
|---|---|---|
QRegularExpression::DefaultWildcardConversion | 0x0 | No se establecen opciones de conversión. |
QRegularExpression::UnanchoredWildcardConversion | 0x1 | La conversión no anclará el patrón. Esto permite coincidencias parciales de cadenas de expresiones comodín. |
QRegularExpression::NonPathWildcardConversion (since Qt 6.6) | 0x2 | La conversión no interpretará el patrón como ruta de archivo globbing. |
Este enum se introdujo en Qt 6.0.
El tipo WildcardConversionOptions es un typedef para QFlags<WildcardConversionOption>. Almacena una combinación OR de valores WildcardConversionOption.
Véase también QRegularExpression::wildcardToRegularExpression.
Documentación de funciones miembro
QRegularExpression::QRegularExpression()
Construye un objeto QRegularExpression con un patrón vacío y sin opciones de patrón.
Véase también setPattern() y setPatternOptions().
[explicit] QRegularExpression::QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = NoPatternOption)
Construye un objeto QRegularExpression utilizando el pattern dado como patrón y el options como las opciones del patrón.
Véase también setPattern() y setPatternOptions().
[noexcept] QRegularExpression::QRegularExpression(const QRegularExpression &re)
Construye un objeto QRegularExpression como copia de re.
Véase también operator=().
[constexpr noexcept, since 6.1] QRegularExpression::QRegularExpression(QRegularExpression &&re)
Construye un objeto QRegularExpression moviendo desde re.
Nótese que una QRegularExpression movida desde sólo puede ser destruida o asignada. El efecto de llamar a otras funciones que no sean el destructor o uno de los operadores de asignación es indefinido.
Esta función se introdujo en Qt 6.1.
Véase también operator=().
[noexcept] QRegularExpression::~QRegularExpression()
Destruye el objeto QRegularExpression.
[static] QString QRegularExpression::anchoredPattern(QStringView expression)
Devuelve el expression envuelto entre los anclajes \A y \z que se utilizará para la concordancia exacta.
[static] QString QRegularExpression::anchoredPattern(const QString &expression)
Se trata de una función sobrecargada.
int QRegularExpression::captureCount() const
Devuelve el número de grupos de captura dentro de la cadena del patrón, o -1 si la expresión regular no es válida.
Nota: El grupo de captura implícito 0 no se incluye en el número devuelto.
Véase también isValid().
QString QRegularExpression::errorString() const
Devuelve una descripción textual del error encontrado al comprobar la validez de la expresión regular, o "no error" si no se ha encontrado ningún error.
Véase también isValid() y patternErrorOffset().
[static] QString QRegularExpression::escape(QStringView str)
Escapa todos los caracteres de str para que dejen de tener un significado especial cuando se utilicen como cadena de patrón de expresión regular, y devuelve la cadena escapada. Por ejemplo:
QString escaped = QRegularExpression::escape("a(x) = f(x) + g(x)"); // escaped == "a\\(x\\)\\ \\=\\ f\\(x\\)\\ \\+\\ g\\(x\\)"
Esto es muy conveniente para construir patrones a partir de cadenas arbitrarias:
QString pattern = "(" + QRegularExpression::escape(name) + "|" + QRegularExpression::escape(nickname) + ")"; QRegularExpression re(pattern);
Nota: Esta función implementa el algoritmo quotemeta de Perl y escapa con una barra invertida todos los caracteres de str, excepto los caracteres de los rangos [A-Z], [a-z] y [0-9], así como el carácter de subrayado (_). La única diferencia con Perl es que un NUL literal dentro de str se escapa con la secuencia "\\0" (barra invertida + '0'), en lugar de "\\\0" (barra invertida + NUL).
[static] QString QRegularExpression::escape(const QString &str)
Se trata de una función sobrecargada.
[static, since 6.0] QRegularExpression QRegularExpression::fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
Devuelve una expresión regular del patrón glob pattern. La expresión regular distinguirá entre mayúsculas y minúsculas si cs es Qt::CaseSensitive, y se convertirá según options.
Equivalente a
auto reOptions = cs == Qt::CaseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption; return QRegularExpression(wildcardToRegularExpression(str, options), reOptions);
Esta función se introdujo en Qt 6.0.
QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Intenta realizar una coincidencia global de la expresión regular con la cadena subject dada, comenzando en la posición offset dentro del asunto, utilizando una coincidencia de tipo matchType y respetando la matchOptions dada.
El QRegularExpressionMatchIterator devuelto se posiciona antes del primer resultado de coincidencia (si lo hay).
Véase también QRegularExpressionMatchIterator y global matching.
[since 6.5] QRegularExpressionMatchIterator QRegularExpression::globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Intenta realizar una coincidencia global de la expresión regular contra la vista de cadena subjectView dada, comenzando en la posición offset dentro del asunto, utilizando una coincidencia de tipo matchType y respetando la matchOptions dada.
El QRegularExpressionMatchIterator devuelto se posiciona antes del primer resultado de coincidencia (si lo hay).
Nota: Los datos referenciados por subjectView deben permanecer válidos mientras haya objetos QRegularExpressionMatchIterator o QRegularExpressionMatch utilizándolos.
Esta función se introdujo en Qt 6.5.
Véase también QRegularExpressionMatchIterator y global matching.
bool QRegularExpression::isValid() const
Devuelve true si la expresión regular es una expresión regular válida (es decir, no contiene errores de sintaxis, etc.), o false en caso contrario. Utilice errorString() para obtener una descripción textual del error.
Véase también errorString() y patternErrorOffset().
QRegularExpressionMatch QRegularExpression::match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Intenta hacer coincidir la expresión regular con la cadena subject dada, comenzando en la posición offset dentro del asunto, utilizando una coincidencia de tipo matchType y respetando la matchOptions dada.
El objeto QRegularExpressionMatch devuelto contiene los resultados de la comparación.
Véase también QRegularExpressionMatch y normal matching.
[since 6.5] QRegularExpressionMatch QRegularExpression::matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
Intenta hacer coincidir la expresión regular con la vista de cadena subjectView dada, comenzando en la posición offset dentro del asunto, utilizando una coincidencia de tipo matchType y respetando la matchOptions dada.
El objeto QRegularExpressionMatch devuelto contiene los resultados de la comparación.
Nota: Los datos referenciados por subjectView deben permanecer válidos mientras haya objetos QRegularExpressionMatch utilizándolos.
Esta función se introdujo en Qt 6.5.
Véase también QRegularExpressionMatch y normal matching.
QStringList QRegularExpression::namedCaptureGroups() const
Devuelve una lista de captureCount() + 1 elementos, que contiene los nombres de los grupos de captura nombrados en la cadena del patrón. La lista se ordena de forma que el elemento de la lista en la posición i sea el nombre del i-ésimo grupo de captura, si tiene nombre, o una cadena vacía si ese grupo de captura no tiene nombre.
Por ejemplo, dada la expresión regular
(?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+)
namedCaptureGroups() devolverá la siguiente lista:
("", "day", "month", "year", "", "name")
que corresponde a que el grupo de captura #0 (correspondiente a toda la coincidencia) no tiene nombre, el grupo de captura #1 tiene nombre "día", el grupo de captura #2 tiene nombre "mes", etc.
Si la expresión regular no es válida, devuelve una lista vacía.
Véase también isValid(), QRegularExpressionMatch::captured() y QString::isEmpty().
void QRegularExpression::optimize() const
Compila el patrón inmediatamente, incluyendo la compilación JIT (si el JIT está activado) para su optimización.
Véase también isValid() y Debugging Code that Uses QRegularExpression.
QString QRegularExpression::pattern() const
Devuelve la cadena patrón de la expresión regular.
Véase también setPattern() y patternOptions().
qsizetype QRegularExpression::patternErrorOffset() const
Devuelve el desplazamiento, dentro de la cadena del patrón, en el que se encontró un error al comprobar la validez de la expresión regular. Si no se encuentra ningún error, se devuelve -1.
Véase también pattern(), isValid() y errorString().
QRegularExpression::PatternOptions QRegularExpression::patternOptions() const
Devuelve las opciones de patrón para la expresión regular.
Véase también setPatternOptions() y pattern().
void QRegularExpression::setPattern(const QString &pattern)
Establece la cadena de patrón de la expresión regular en pattern. Las opciones de patrón no se modifican.
Véase también pattern() y setPatternOptions().
void QRegularExpression::setPatternOptions(QRegularExpression::PatternOptions options)
Establece el options dado como las opciones de patrón de la expresión regular. La cadena del patrón no se modifica.
Véase también patternOptions() y setPattern().
[noexcept] void QRegularExpression::swap(QRegularExpression &other)
Intercambia esta expresión regular con other. Esta operación es muy rápida y nunca falla.
[static] QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
Devuelve una representación de expresión regular del glob dado pattern.
Hay dos transformaciones posibles, una que se centra en el globbing de rutas de archivos y otra que es más genérica.
Por defecto, la transformación está orientada al globbing de rutas de archivos, lo que significa en particular que los separadores de rutas reciben un tratamiento especial. Esto implica que no se trata sólo de una traducción básica de "*" a ".*" y similares.
QString wildcard = QRegularExpression::wildcardToRegularExpression("*.jpeg"); // Will match files with names like: // foo.jpeg // f_o_o.jpeg // föö.jpeg
La transformación globbing más genérica está disponible pasando NonPathWildcardConversion en la conversión options.
Esta implementación sigue de cerca la definición de comodín para patrones glob:
| c | Cualquier carácter se representa a sí mismo aparte de los mencionados a continuación. Así, c coincide con el carácter c. |
| ? | Coincide con cualquier carácter, excepto un separador de ruta (en caso de que se haya seleccionado la búsqueda global de rutas de archivos). Es igual que b{.} en las expresiones regulares completas. |
| * | Coincide con cero o más caracteres cualesquiera, excepto separadores de rutas (en caso de que se haya seleccionado la globalización de rutas de archivos). Es igual que .* en expresiones regulares completas. |
| [abc] | Coincide con un carácter dado entre paréntesis. |
| [a-c] | Coincide con un carácter del intervalo indicado en el paréntesis. |
| [abc] | Coincide con un carácter que no aparece entre paréntesis. Es igual que [^abc ] en una expresión regular completa. |
| [a-c] | Coincide con un carácter que no pertenece al intervalo indicado en el paréntesis. Es igual que [^a-c ] en una expresión regular completa. |
Nota: Por razones históricas, una barra invertida (\) no es un carácter de escape en este contexto. Para que coincida con uno de los caracteres especiales, colóquelo entre corchetes (por ejemplo, [?]).
Encontrará más información sobre la implementación en:
- El artículo Glob de Wikipedia
man 7 glob
Por defecto, la expresión regular devuelta está totalmente anclada. En otras palabras, no es necesario volver a llamar a anchoredPattern() sobre el resultado. Para obtener una expresión regular que no esté anclada, pase UnanchoredWildcardConversion en la conversión options.
Véase también escape().
[static] QString QRegularExpression::wildcardToRegularExpression(const QString &pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
Se trata de una función sobrecargada.
[noexcept] QRegularExpression &QRegularExpression::operator=(QRegularExpression &&re)
Mover-asigna la expresión regular re a este objeto, y devuelve una referencia al resultado. Tanto el patrón como las opciones del patrón se copian.
Tenga en cuenta que un objeto movido desde QRegularExpression sólo puede ser destruido o asignado. El efecto de llamar a otras funciones que no sean el destructor o uno de los operadores de asignación es indefinido.
[noexcept] QRegularExpression &QRegularExpression::operator=(const QRegularExpression &re)
Asigna la expresión regular re a este objeto y devuelve una referencia a la copia. Se copian tanto el patrón como las opciones del patrón.
No miembros relacionados
[noexcept] size_t qHash(const QRegularExpression &key, size_t seed = 0)
Devuelve el valor hash para key, utilizando seed para sembrar el cálculo.
[noexcept] bool operator!=(const QRegularExpression &lhs, const QRegularExpression &rhs)
Devuelve true si la expresión regular lhs es diferente de la rhs, o false en caso contrario.
Véase también operator==().
QDataStream &operator<<(QDataStream &out, const QRegularExpression &re)
Escribe la expresión regular re en el flujo out.
Ver también Serializar tipos de datos Qt.
QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions)
Escribe las opciones de patrón patternOptions en el objeto de depuración debug con fines de depuración.
Véase también Técnicas de depuración.
QDebug operator<<(QDebug debug, const QRegularExpression &re)
Escribe la expresión regular re en el objeto de depuración debug con fines de depuración.
Véase también Técnicas de depuración.
[noexcept] bool operator==(const QRegularExpression &lhs, const QRegularExpression &rhs)
Devuelve true si la expresión regular lhs es igual a la rhs, o false en caso contrario. Dos objetos QRegularExpression son iguales si tienen la misma cadena de patrón y las mismas opciones de patrón.
Véase también operator!=().
QDataStream &operator>>(QDataStream &in, QRegularExpression &re)
Lee una expresión regular del flujo in en re.
Véase también Serializar tipos de datos Qt.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.