regular online net ismatch ejemplos dotnetperls .net regex

.net - online - regex.ismatch c#



Expresión de grupos de equilibrio de.NET Regex: coincidencia cuando no está equilibrado (2)

¿Has comprobado qué coincide en el segundo caso? Como no tiene ningún anclaje, creo que el motor arranca justo después del primer ''{''. Desde allí, hasta el final, la cadena coincide.

Intente rodear el patrón con / A y / z.

Las expresiones regulares de grupo equilibrado de .NET hacen que mi cabeza explote. Tengo esta cadena que intento hacer coincidir:

other stuff blah blah.... { stuff stuff {key: stuff stuff } } more stuff.....

Aquí está mi expresión regular:

[^{}]* # anything that isn''t { } /{ # starting with { (?> # atomic group: throw away backtracks on exit [^{}]+ | /{(?:/w+:)?(?<DEPTH>) # on matching { plus optional "word:" push stack | /}(?<-DEPTH>) # on matching } pop stack )* (?(DEPTH)(?!)) # if depth unbalanced, fail match /} # ending with } [^{}]* # anything that isn''t { }

Por lo tanto, estoy tratando de combinar las llaves de equilibrio, donde algunas de las llaves tienen una palabra opcional seguida de dos puntos. La expresión regular anterior coincide con mi cadena de ejemplo, pero si elimino una llave, (es decir, "desequilibrarla"):

other stuff blah blah.... { stuff stuff {key: stuff stuff } more stuff.....

... todavía coincide!

¿Alguien puede decirme cómo arreglar mi expresión regular?


No es una alegría mortal, pero lo que estás tratando de hacer con una expresión regular te deja boquiabierto porque simplemente no es posible. Las expresiones regulares son una clase de autómatas finitos y no poseen el estado suficiente para realizar la coincidencia recursiva / anidada. Necesitarás una gramática de contexto libre para que funcione.

Hay algunos motores de expresiones regulares que admiten una noción de recursión. Sin embargo, estas no son estrictamente expresiones regulares. ¿Puede decirnos qué motor está utilizando porque es posible que tenga una función de recursión que ayudará a este escenario?