Estoy tratando de obtener coincidencias en una cadena en Unity usando un patrón de expresiones regulares. Escribí todo el código dentro de un proyecto de muestra y funcionó perfectamente bien.
tokens[line] = Regex.Matches(instructionLines[line], "^\\w*|(?<=q\\[)\\d*(?=\\]))";He validado que coincide con lo que necesito con regex101 .
Luego imprimí el resultado en mi consola, que también fue correcto.
Console App: h 0 h 1 h 2 h 3 cx 1 2 t 1Finalmente, copié y pegué el código en Unity, y no coincide con la primera palabra de la línea como lo hizo en el proyecto de muestra.
Unity Console: 0 1 2 3 1 2 1No cambié nada, las importaciones son las mismas (usando System.Text.RegularExpressions;) y la expresión regular es correcta. ¿Por qué Unity hace esto y cómo soluciono este comportamiento incorrecto?
El problema se solucionó gracias a @Thefourthbird, para citar los comentarios:
Pruébelo agregando multilínea (?m)^[az] |(?<=q[)\d (?=])
En el enlace que agregó a su pregunta regex101.com/r/FzpZXq/1, puede ver en la parte superior derecha que hay una bandera m para multilínea. Como su patrón usa un ancla ^, debe habilitar la multilínea, lo que también se puede hacer usando un modificador en línea (?m) Consulte regular-expressions.info/anchors.html