Convierta la etiqueta de cierre de PHP en un comentario
⏰ 9 minutos de lectura
v1n_vampiro
Una de las líneas de mi script contiene una etiqueta de cierre de PHP dentro de una cadena. En condiciones normales, esto no causa ningún problema, pero necesito comentar la línea.
He intentado comentar esta línea con //, /**/ y # pero ninguno de ellos funciona, el analizador considera que la etiqueta de cierre es una etiqueta de cierre real.
DIOS MÍO. Al principio era escéptico ante su pregunta, listo para preguntar cuál era el problema, pero luego traté de comentar una línea con una cadena que contenía ‘?>’ y lo entendí. Esto debe agregarse a la larga lista de phptristeza.com
@lolesque Gracias por ese enlace. Una buena. Uno relacionado que también cubre otros idiomas: wiki.theory.org/TuIdiomaApesta
– Simón Forsberg
5 de marzo de 2013 a las 11:36
@OndraŽižka todo lo que está haciendo es eliminar las etiquetas br repetidas. una expresión regular funciona bien para eso. El hecho de que sea malo a veces no significa que sea malo todo el tiempo.
– Kip
7 de marzo de 2013 a las 19:06
peterka
Usa un truco: concatena la cadena de dos piezas. De esta manera, la etiqueta de cierre se corta en dos y ya no es una etiqueta de cierre válida. '?>' --> '?'.'>'
Para corregir ambos estilos de comentario, puede poner /y> en su propia clase de personaje.
Arreglar usando el /x modificador
los xmodificador – alias PCRE_EXTENDED – ignora espacios y saltos de línea en una expresión regular (excepto cuando ocurren dentro de una clase de caracteres); esto hace posible agregar espacios para separar los caracteres problemáticos. Para corregir ambos estilos de comentario:
@Cthulhu +1 (y también por la respuesta, por supuesto). Además (al menos para mí) esto hace que la expresión regular sea un poco más difícil de entender. No mucho, pero si viera esta expresión regular, diría: Hmmm, ¿qué está pasando? Pero eso es francamente y totalmente subjetivo.
– ppeterka
5 de marzo de 2013 a las 9:20
@ppeterka Estoy algo de acuerdo, así que encontré otra forma, usando el x modificador 🙂
– Jacobo
5 de marzo de 2013 a las 9:26
@Jack Nice, le daría otro +1, he aprendido algo nuevo… Sigo olvidándome de los modificadores de expresiones regulares (rara vez los uso aparte de g)…
– ppeterka
5 de marzo de 2013 a las 9:28
@Jack Gracias, aprendo cosas nuevas sobre expresiones regulares de la solución.
– v1n_vampiro
5 de marzo de 2013 a las 9:30
+1 por separar la expresión regular en una línea anterior. Mantiene la expresión regular igual, pero aún permite comentar la lógica.
– usuario764357
22 de julio de 2013 a las 5:55
Anirudh Ramanathan
Por qué tus intentos no funcionaron:
// $string = preg_replace('#<br\s*/?>(?:\s*<br\s*/?>)+#i',...
^ doesn't work due to ?> ending php
/* $string = preg_replace('#<br\s*/?>(?:\s*<br\s*/?>)+#i',... */
^ doesn't work due to */ closing comment
Después de lo anterior, debería poder usar /* para comentar la línea. Si dejas el ?> intacto, // no es posible comentar una línea completa. El texto siguiente ?> podría ser html, que es fuera del control del intérprete de PHP, por lo que no funcionaría.
Los estilos de comentario de “una línea” solo comentan hasta el final de la línea o el bloque actual de código PHP, lo que ocurra primero. Esto significa que el código HTML después de // … ?> o # … ?> SE IMPRIMIRÁ: ?> sale del modo PHP y vuelve al modo HTML, y // o # no pueden influir en eso.
Gracias, tantas cosas que aún no sé… Es útil.
– v1n_vampiro
5 de marzo de 2013 a las 9:37
Esta publicación merecería muchos más +1… Solo por la explicación detallada.
– ppeterka
5 de marzo de 2013 a las 14:39
Tim Pietzcker
Otra idea: escapar de la > (y el /si desea utilizar un /*...*/ comentario):
+1 esta página comienza a ser un muy buen lugar para recopilar trucos de expresiones regulares para tener en el fondo de nuestras mentes.
– ppeterka
7 de marzo de 2013 a las 8:51
@ppeterka, en realidad llamaría a todas las demás respuestas “trucos”, pero mi respuesta es solo usar la versión larga del cuantificador y no el atajo.
– tallo
7 de marzo de 2013 a las 9:33
Sin ofender, solo que en mi diccionario, usar la versión larga de una expresión en lugar del azúcar sintáctico más corto y conveniente también cuenta como un truco…
– ppeterka
7 de marzo de 2013 a las 9:41
Algunas otras formas que vale la pena agregar al Libro de trucos RegEx:
Primero podría compactar su RegEx para: /(<br\s*/?>)+/i y reemplazar con <br /> (no es necesario cargar el RegExP con anticipación) y siempre terminará con el salto de línea XHMTL elegido.
Otras formas de modificar su RegEx para que no se dispare */ comentario final o ?> guion final:
Usar cuantificadores posesivos : #(<br\s*+/?+>)+#i – lo que básicamente significa para \s*+ si encontró espacios en blanco, haga coincidir tantos como hay y manténgalos, y para /?+ si encontraste una barra, ¡guárdala!
Encerrar \s* y /* en grupos de captura => #(<br(\s*)(/?)>)+#i
Y dado que nos inclinamos por el comportamiento posesivo, el RegEx más rápido que también pasa por alto el problema de los comentarios es: #(<br\s*+/?+>)++#idemostración explicada
En cuanto a comentar en situaciones difíciles
Cuando no puede cambiar el código, o ya ha usado un comentario de varias líneas y:
No hay té ahoradoc es similar a un heredoc pero no analiza el contenido y tiene que tener su comenzando delimitador encerrado en 'comillas simples' (tenga en cuenta que el no se puede identificar el delimitador finaldebe ir seguido de ; y un nueva línea !)
+1 esta página comienza a ser un muy buen lugar para recopilar trucos de expresiones regulares para tener en el fondo de nuestras mentes.
– ppeterka
7 de marzo de 2013 a las 8:51
@ppeterka, en realidad llamaría a todas las demás respuestas “trucos”, pero mi respuesta es solo usar la versión larga del cuantificador y no el atajo.
– tallo
7 de marzo de 2013 a las 9:33
Sin ofender, solo que en mi diccionario, usar la versión larga de una expresión en lugar del azúcar sintáctico más corto y conveniente también cuenta como un truco…
– ppeterka
7 de marzo de 2013 a las 9:41
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Problema divertido, pero real. Yo voto arriba
– Voitcus
5 de marzo de 2013 a las 9:33
DIOS MÍO. Al principio era escéptico ante su pregunta, listo para preguntar cuál era el problema, pero luego traté de comentar una línea con una cadena que contenía ‘?>’ y lo entendí. Esto debe agregarse a la larga lista de phptristeza.com
– lolesco
5 de marzo de 2013 a las 10:35
La utilidad de tal “característica” se explica en php.net/manual/en/language.basic-syntax.comments.phpes útil en el caso de una sola línea
<?php # echo 'simple';?>
.– lolesco
5 de marzo de 2013 a las 11:17
@lolesque Gracias por ese enlace. Una buena. Uno relacionado que también cubre otros idiomas: wiki.theory.org/TuIdiomaApesta
– Simón Forsberg
5 de marzo de 2013 a las 11:36
@OndraŽižka todo lo que está haciendo es eliminar las etiquetas br repetidas. una expresión regular funciona bien para eso. El hecho de que sea malo a veces no significa que sea malo todo el tiempo.
– Kip
7 de marzo de 2013 a las 19:06