Actualmente intento hacer coincidir los comentarios con expresiones regulares, pero solo si no sigue ninguna función. Actualmente uso una expresión regular que también coincide con la función de palabra clave. Y luego verifique en el código fuente (php) si este grupo está configurado o no.
/\/\*\*.*?\*\/\s*(function)?/sghttps://regex101.com/r/l0j1ip/1
Ahora la pregunta es si es posible darse cuenta con expresiones regulares puras. Lo he intentado con una simple mirada hacia adelante negativa pero sin éxito. Aunque el comentario ya no se hace individualmente, sino solo con el comentario posterior.
/\/\*\*.*?\*\/\s*(?!function)/sghttps://regex101.com/r/PuUUw6/1
Luego probé el grupo sin captura. Pero también allí sin éxito.
/(?:\/\*\*.*?\*\/\s*function)|\/\*\*.*?\*\/\s*/sghttps://regex101.com/r/wkQE7E/1
Después de un comentario con la información (*SKIP)(*FAIL) también lo probé sin éxito. Se omiten todas las coincidencias por encima de esta palabra clave. También se saltan los partidos individuales.
/\/\*\*.*?\*\/\s*function(*SKIP)(*FAIL)|\/\*\*.*?\*\//sgDespués de leer la pregunta nuevamente, debería ser factible usando una búsqueda anticipada negativa; la repetición debe estar dentro de la expresión negativa:
/\/\*\*((?!\*\/).)*\*\/(?!\s*function)/sg Parece que necesita comprender mejor cómo funciona el retroceso, utilizando .*? en lugar de .* significa que el motor de expresiones regulares intentará primero hacer coincidir todo después de antes de .* sin embargo, la búsqueda negativa hacia adelante hace que la coincidencia falle y .* continúa coincidiendo. Usar ((?!\*\/).)* no puede coincidir con \*\/ mientras que .*? puede, después de retroceder. Otra solución es usar el grupo atómico (?>\/\*\*.*?\*\/)(?!\s*function) .
Otra opción sin el indicador /s podría ser
/\*\*(?:[^*]*+|\*(?!/)[^*]*+)*\*/(?!\s*function)El patrón coincide:
/\*\* Partido /**(?: grupo de no captura[^*]*+ Coincide con cualquier carácter excepto * usando un cuantificador posesivo| O\*(?!/) Partido * no seguido de /[^*]*+ Coincide con cualquier carácter excepto * usando un cuantificador posesivo)* Cerrar el grupo de no captura y, opcionalmente, repetir\*/ Partido */(?!\s*function) Negative lookahead, afirmar caracteres de espacio en blanco no opcionales seguidos de la función a la derechaDemostración de expresiones regulares
Tenga en cuenta que no tiene que escapar de la barra invertida cuando usa un delimitador diferente.
$regex = '~/\*\*(?:[^*]*+|\*(?!/)[^*]*+)*\*/(?!\s*function)~';