GOOGLE ADS

sábado, 30 de abril de 2022

Regex fallando en los parens derechos

Tengo esta expresión regular de.NET:

^(?<prefix>("[^"]*"))\s(?<attrgroup>(\([^\)]*\)))\s(?<suffix>("[^"]*"))$

Coincide correctamente con las siguientes cadenas:

"some prefix" ("attribute 1" "value 1") "some suffix"
"some prefix" ("attribute 1" "value 1" "attribute 2" "value 2") "some suffix"

Falla en...

"some prefix" ("attribute 1" "value (fail) 1") "some suffix"

...debido al paréntesis derecho después de "fail".

¿Cómo puedo modificar mi expresión regular para que el attrgroupgrupo de coincidencias termine conteniendo " ("attribute 1" "value (fail) 1")"? Lo he estado mirando durante demasiado tiempo y necesito algunos ojos nuevos. ¡Gracias!

Editar: attrgroup nunca contendrá nada más que pares de cadenas entre comillas dobles.


Solución del problema

mi suposición no probada:

^(?<prefix>("[^"]*"))\s(?<attrgroup>(\(("[^"]*")(\s("[^"]*")*)**\)))\s(?<suffix>("[^"]*"))$

por la presente he reemplazado

[^\)]*

con

("[^"]*")(\s("[^"]*")*)*

Asumí que todo lo que está entre paréntesis está entre comillas dobles o es un espacio en blanco.

Si quieres saber cómo se me ocurrió esto, lee Dominar las expresiones regulares.

PD. si estoy en lo correcto, esto también validará el grupo de atributos como pares de cadenas entrecomilladas.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...