21. Expresiones Regulares

21.1 Resumen

JMeter incluye el software de coincidencia de patrones Apache Jakarta ORO
. Hay alguna documentación para esto en el sitio web de Jakarta, por ejemplo, un resumen de los caracteres de coincidencia de patrones .

También hay documentación sobre una encarnación anterior del producto en la Guía del usuario de OROMatcher , que puede resultar útil.

La coincidencia de patrones es muy similar a la coincidencia de patrones en Perl. Una instalación completa de Perl incluirá abundante documentación sobre expresiones regulares: busque perlrequick , perlretut , perlre y perlreref .

Vale la pena enfatizar la diferencia entre " contiene " y " coincide ", tal como se usa en el elemento de prueba Aserción de respuesta:

" contiene "
significa que la expresión regular coincidió con al menos una parte del objetivo, por lo que ' alfabeto ' " contiene " ' ph.b. ' porque la expresión regular coincide con la subcadena ' phabe '.
" coincidencias "
significa que la expresión regular coincidió con todo el objetivo. Así que ' alfabeto ' es " emparejado " por ' al.*t '.

En este caso, es equivalente a envolver la expresión regular en ^ y $ , a saber, ' ^al.*t$ '.

Sin embargo, este no es siempre el caso. Por ejemplo, la expresión regular ' alp|.lp.* ' está " contenida " en ' alfabeto ', pero no " coincide " con ' alfabeto '.

¿Por qué? Porque cuando el comparador de patrones encuentra la secuencia ' alp ' en ' alphabet ', deja de probar cualquier otra combinación, y ' alp ' no es lo mismo que ' alphabet ', ya que no incluye ' habet '.

A diferencia de Perl, no hay necesidad de encerrar (es decir, no) la expresión regular en // .

Entonces, ¿cómo se usan los modificadores ismx, etc. si no hay un seguimiento de / ?? La solución es utilizar expresiones regulares extendidas , es decir, /abc/i se convierte en (?i)abc . Consulte también Colocación de modificadores a continuación.

21.2 Ejemplos

Extraer una sola cadena

Suponga que desea hacer coincidir la siguiente parte de una página web:
name="file" value="readme.txt">
y desea extraer readme.txt .
Una expresión regular adecuada sería:
nombre="archivo" valor="(.+?)">

Los caracteres especiales anteriores son:

( y )
estos encierran la parte de la cadena de coincidencia que se devolverá
.
coincidir con cualquier personaje
+
una o más veces
?
no seas codicioso, es decir, detente cuando el primer partido tenga éxito

Nota: sin el ? , el .+ continuaría más allá del primer "> hasta que encontrara el último posible "> , que probablemente no sea lo que se pretendía.

Nota: aunque la expresión anterior funciona, es más eficiente usar la siguiente expresión:
nombre="archivo" valor="([^"]+)"> donde
[^"] - significa que coincide con cualquier cosa excepto "
En este caso, el el motor de búsqueda puede dejar de buscar tan pronto como vea el primero " , mientras que en el caso anterior el motor tiene que comprobar que ha encontrado "> en lugar de decir " > .

Extraer varias cadenas

Suponga que desea hacer coincidir la siguiente parte de una página web:
name="file.name" value="readme.txt" y desea extraer tanto file.name como readme.txt .
Una expresión regular adecuada sería:
name="([^"]+)" value="([^"]+)"
Esto crearía 2 grupos, que podrían usarse en la plantilla JMeter Regular Expression Extractor como $1$ y $2$ .

JMeter Regex Extractor guarda los valores de los grupos en variables adicionales.

Por ejemplo, suponga:

  • Nombre de referencia: MYREF
  • Regex: nombre="(.+?)" valor="(.+?)"
  • Plantilla: $1$$2$
No encierre la expresión regular en / /

Se establecerían las siguientes variables:

MYREF
archivo.nombrereadme.txt
MYREF_g0
nombre="archivo.nombre" valor="readme.txt"
MYREF_g1
Nombre del archivo
MYREF_g2
Léame.txt
Se puede hacer referencia a estas variables más adelante en el plan de prueba de JMeter, como ${MYREF} , ${MYREF_g1} , etc.

21.3 Modo de línea

La coincidencia de patrones se comporta de varias maneras ligeramente diferentes, dependiendo de la configuración de los modificadores multilínea y de una sola línea. Tenga en cuenta que los operadores de una sola línea y de varias líneas no tienen nada que ver entre sí; se pueden especificar de forma independiente.

Modo de una sola línea

El modo de una sola línea solo afecta la forma en que ' . Se interpreta el metacarácter.

El comportamiento predeterminado es ese ' . ' coincide con cualquier carácter excepto nueva línea. En el modo de una sola línea, ' . ' también coincide con la nueva línea.

Modo multilínea

El modo multilínea solo afecta la interpretación de los metacaracteres ' ^ ' y ' $ '.

El comportamiento predeterminado es que ' ^ ' y ' $ ' solo coinciden al principio y al final de la cadena. Cuando se utiliza el modo multilínea, el metacarácter ' ^ ' coincide al principio de cada línea y el metacarácter ' $ ' coincide al final de cada línea.

21.4 Metacaracteres

Las expresiones regulares usan ciertos caracteres como metacaracteres; estos caracteres tienen un significado especial para el motor RE. Dichos caracteres deben escaparse precediéndolos con \ (barra invertida) para tratarlos como caracteres normales. Aquí hay una lista de los metacaracteres y su significado (consulte la documentación de ORO si tiene dudas).

( y )
agrupamiento
[ y ]
clases de personajes
{ y }
repetición
* , + y ?
repetición
.
carácter comodín
\
Personaje de escape
|
alternativas
^ y $
inicio y final de cadena o línea
Tenga en cuenta que ORO no admite los metacaracteres \Q y \E . [En otros motores RE, se pueden usar para citar una parte de un RE para que los metacaracteres se representen por sí mismos.] Puede usar la función para hacer el equivalente, consulte ${__escapeOroRegexpChars(valueToEscape)} .

Las siguientes expresiones regulares extendidas de Perl5 son compatibles con ORO.

(?#texto)
Un comentario incrustado que hace que se ignore el texto.
(?: expresión regular)
Agrupa cosas como " () " pero no hace que se guarde la coincidencia del grupo.
(?=expreg)
Una aserción anticipada positiva de ancho cero. Por ejemplo, \w+(?=\s) coincide con una palabra seguida de un espacio en blanco, sin incluir espacios en blanco en MatchResult.
(?! expresión regular)
Una aserción anticipada negativa de ancho cero. Por ejemplo , foo(?!bar) coincide con cualquier aparición de " foo " que no vaya seguida de " bar ". Recuerde que esta es una afirmación de ancho cero, lo que significa que a(?!b)d coincidirá con ad porque a va seguido de un carácter que no es b (la d ) y una d sigue a la afirmación de ancho cero.
(? imsx)
Uno o más modificadores de coincidencia de patrones incrustados. i habilita la insensibilidad a mayúsculas y minúsculas, m habilita el tratamiento multilínea de la entrada, s habilita el tratamiento de una sola línea de la entrada yx habilita los comentarios de espacios en blanco extendidos.
Tenga en cuenta que (?<=regexp) - lookbehind - no es compatible.

21.5 Colocación de modificadores

Los modificadores se pueden colocar en cualquier lugar de la expresión regular y se aplican desde ese punto en adelante. [Un error en ORO significa que no se pueden usar al final de la expresión regular. Sin embargo, no tendrían ningún efecto allí de todos modos.]

Los modificadores de una sola línea (?s) y de varias líneas (?m) normalmente se colocan al comienzo de la expresión regular.

El modificador de ignorar mayúsculas y minúsculas (?i) se puede aplicar de manera útil solo a una parte de una expresión regular, por ejemplo:

Coincidencia de caso ExAct o caso (?i)ArBiTraRY(?-i)
coincidiría con el caso Match ExAct o el caso arbitrario , así como con el caso Match ExAct o el caso ARBitrario , pero no con el caso Coincidencia exacta o el caso ArBiTrARY .

21.6 Prueba de expresiones regulares

Desde JMeter 2.4, el árbol de resultados de vista del oyente incluye un probador RegExp para probar expresiones regulares directamente en los datos de respuesta del muestreador.

Hay un sitio web para probar las expresiones regulares de Java.

Otro enfoque es usar un plan de prueba simple para probar las expresiones regulares. La muestra de solicitud de Java se puede usar para generar una muestra, o la muestra de HTTP se puede usar para cargar un archivo. Agregue un Debug Sampler y un Tree View Listener y los cambios en la expresión regular se pueden probar rápidamente, sin necesidad de acceder a ningún servidor externo.

Go to top