c++ - ¿Hay alguna diferencia entre QRegularExpression y QRegExp?
qt qt5 (2)
Al menos para Qt 4.8. Puedo dar una razón muy práctica para usar QRegularExpressions
lugar de QRegExp
:
¿Te parecen peligrosos?
int index = myQString.indexOf(myQRegExp);
bool okay = myQString.contains(myQRegExp);
Ambas líneas pueden dañar tu montón, bloquear o colgar tu aplicación. Experimenté corrupción de montón y me quedo con Qt 4.8. La publicación del blog QString :: indexOf () versus Qt 4.5 explica que QString::indexOf()
modifica un objeto const QRegExp
. QString::contains()
línea QString::indexOf()
por lo que es el mismo problema.
Si está atrapado con Qt4 y, por lo tanto, QRegExp, puede usar
int index = myQRegExp.indexIn(myQString);
bool okay = (myQRegExp.indexIn(myQString) != -1);
en tus fuentes en su lugar. O parche las fuentes de Qt.
Veo que hay una nueva clase para expresiones regulares: QRegularExpression
. ¿Es solo un typedef para QRegExp, o una nueva clase, o qué? ¿Y por qué lo necesitamos, ya tenemos QRegExp?
Ok, después de investigar más en los documentos, encontré que realmente es una nueva clase, tiene mejoras, pero solo está disponible en Qt5, por lo que no puedes usarla si deseas compilar en Qt4 y Qt5:
Notas para los usuarios de QRegExp
La clase QRegularExpression introducida en Qt 5 es una gran mejora con respecto a QRegExp, en términos de API ofrecidas, sintaxis de patrones admitidos y velocidad de ejecución. La mayor diferencia es que QRegularExpression simplemente tiene una expresión regular y no se modifica cuando se solicita una coincidencia. En su lugar, se devuelve un objeto QRegularExpressionMatch para verificar el resultado de una coincidencia y extraer la subcadena capturada. Lo mismo se aplica con la coincidencia global y QRegularExpressionMatchIterator.