Quiero probar si dos idiomas tienen una cadena en común. Ambos idiomas provienen de un subconjunto de los idiomas regulares que se describen a continuación y solo necesito saber si existe una cadena en ambos idiomas, no producir una cadena de ejemplo.Prueba de intersección de dos idiomas regulares
El lenguaje es especificado por una cadena Glob-como como
/foo/**/bar/*.baz
donde **
0 o más de los personajes y *
partidos cero o más caracteres que no son /
, y todos otros personajes son literales.
¿Alguna idea?
gracias, micrófono
EDIT:
I implementado algo que parece funcionar bien, pero aún tienen que probar una prueba de corrección. Se puede ver la source y unit tests
¿Qué idioma utilizará para realizar el control? Probablemente va a necesitar escribir una cama de prueba para esto. Si pudieras publicar un banco de pruebas bastante completo, sería útil. –
Esto deberá ejecutarse en JS. Por supuesto, tendré que escribir un testbed. Encontré un subconjunto útil para el cual puedo calcular la intersección de manera eficiente haciendo algunos trucos. El subconjunto útil es aquel en el que * y ** solo pueden aparecer al principio o directamente después de a /, y a/no puede ser adyacente a otro /. Eso significa que nunca tengo que preocuparme de si * foo * puede coincidir con boo * baz - Tengo que hacer un backtracking, pero no es una cantidad ridícula ya que siempre puedo convertir el texto después de un * o ** en una comprobación de sufijo. –