Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

252
Views
coincidencia de omisión de expresión regular si sigue un espacio en blanco y una palabra clave

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)?/sg

https://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)/sg

https://regex101.com/r/PuUUw6/1

Luego probé el grupo sin captura. Pero también allí sin éxito.

 /(?:\/\*\*.*?\*\/\s*function)|\/\*\*.*?\*\/\s*/sg

https://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)|\/\*\*.*?\*\//sg

https://regex101.com/r/OJSFrF/1

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Despué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) .

over 4 years ago · Santiago Trujillo Report

0

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 derecha

Demostración de expresiones regulares

Tenga en cuenta que no tiene que escapar de la barra invertida cuando usa un delimitador diferente.

 $regex = '~/\*\*(?:[^*]*+|\*(?!/)[^*]*+)*\*/(?!\s*function)~';
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!