PHP regex devuelve algunos de los enteros en una cadena
Pregunta
Necesito ayuda con Regex, por favor.
Pensé que tenía SVN felizmente integrado con Mantis hasta que llegué a un problema con un checkin que contiene múltiples problemas. Estoy usando mantis de 1.2.5
El mensaje de confirmación que estoy tratando de apoyar podría gustar: "Los problemas #74 78 112 hicieron algo para la línea 485 que solo tomó 3 horas y 27 minutos". Necesito que mi regexp regrese [74, 78, 112] (pero no [485, 7, 27]).
Mi actual' $g_source_control_regexp = '/\b(bug|issue)[s]{0,1}\s*[#]{0,1}\s*(\d+\s+)+/i'
parece estar devolviendo 1 elemento de 'Problemas #74 78 112' que no actualiza nada
Cualquier consejo apreciado.
Jim
Solución
No creo que puedas hacer eso con Just Regex. Los grupos de captura repetidos capturan solo la última iteración (lea más sobre Repetir un grupo de captura frente a capturar un grupo repetido)
De lo contrario, lo haría así (tenga en cuenta que no soy un programador de PHP ...):
str.match(/\b(?:bug|issue)s?\s*#?\s*((?:\d+\s+)+)/i)[1].trim().split(/\s+/)
result: ["74", "78", "112"]
(?:)
¿Son grupos no capturantes?matches[0]
suele ser la coincidencia de patrón completomatches[1]
es el primer grupo capturado (el único en este caso)trim()
es necesario deshacerse de un espacio adicional al final (sin él obtendrías un grupo vacío al final ["74", "78", "112", ""])