Si escribo solo la siguiente línea, la corta sin razón, así que...:
Hola,
Necesito ayuda para esto, estoy fuera de mi conocimiento.
Estoy atascado en un pequeño sistema TPL que debería hacer algunas declaraciones foreach y if. Hago esto en PHP, pero no sé si esto es relevante.
https://regexr.com/62ho9 aquí puedes ver mi problema. Quiero que la expresión regular termine en el segundo {/if} pero no es así. ¿Hay alguna solución posible para hacer esto con expresiones regulares?
Si no, ¿tienes una buena idea para que PHP haga lo que quiero? Porque no tengo ideas.
(?<={if \!TEST})([\s\S]*?)(?={\/if}) <a class="dropdown-item" href="#"> {if !TEST} {USERNAME} {if !TEST} HI {/if} klöaksdölsa {/if} asdas {if !TEST}asd{/if} </a>Por el momento uso {if ID declaración} LOREM {/if ID} pero la solución más elegante sería sin ID :D
(PRUEBA: Hola chicos) <-- ¡¿porque lo corta todo el tiempo desde el principio?!
Sí, puede usar recursividad en expresiones regulares de PHP y la expresión regular que podría usar es
(?s){if\s+!TEST}((?:(?!{(?:if\s+!TEST|\/if)}).|(?R))*){\/if}Vea la demostración de expresiones regulares . Solo necesita obtener el valor del Grupo 1 después de obtener una coincidencia.
Detalles :
(?s) - una bandera s en línea{if\s+!TEST} - {if , uno o más espacios en blanco, !TEST}((?:(?!{(?:if\s+!TEST|\/if)}).|(?R))*) - Grupo 1: cero o más ocurrencias de(?!{(?:if\s+!TEST|\/if)}). - cualquier carácter que no sea el punto de inicio de una secuencia de caracteres {if !TEST} y {/if}|(?R) - todo el patrón recursivo{\/if} - una subcadena {/if} .