Quiero buscar {{ upc }} y comenzar la captura no desde <div inmediatamente antes del partido, sino el segundo <div antes del partido, es decir, <div class="form-group"> y capturar no arriba al primer </div> después del partido pero al segundo, es decir, al cierre </div> o hasta el comienzo del siguiente <div class="form-group"> (dependiendo de cómo lo veas)

Aquí está la muestra de plantilla HTML / Twig que quiero buscar y reemplazar.

<div class="form-group">
    <label class="col-sm-2 control-label" for="input-sku"><span data-toggle="tooltip" title="{{ help_sku }}">{{ entry_sku }}</span></label>
    <div class="col-sm-10">
        <input type="text" name="sku" value="{{ sku }}" placeholder="{{ entry_sku }}" id="input-sku" class="form-control"/>
    </div>
</div>
<div class="form-group">
     <label class="col-sm-2 control-label" for="input-upc"><span data-toggle="tooltip" title="{{ help_upc }}">{{ entry_upc }}</span></label>
     <div class="col-sm-10">
         <input type="text" name="upc" value="{{ upc }}" placeholder="{{ entry_upc }}" id="input-upc" class="form-control"/>
     </div>
</div>
<div class="form-group">
     <label class="col-sm-2 control-label" for="input-ean"><span data-toggle="tooltip" title="{{ help_ean }}">{{ entry_ean }}</span></label>
     <div class="col-sm-10">
         <input type="text" name="ean" value="{{ ean }}" placeholder="{{ entry_ean }}" id="input-ean" class="form-control"/>
     </div>
</div>

La coincidencia de expresiones regulares esperada es la siguiente:

<div class="form-group">
     <label class="col-sm-2 control-label" for="input-upc"><span data-toggle="tooltip" title="{{ help_upc }}">{{ entry_upc }}</span></label>
     <div class="col-sm-10">
         <input type="text" name="upc" value="{{ upc }}" placeholder="{{ entry_upc }}" id="input-upc" class="form-control"/>
     </div>
</div>

Toda la ayuda apreciada. Gracias.

0
Trent Renshaw 20 abr. 2020 a las 10:57

2 respuestas

La mejor respuesta

Una cosa que puedes probar es usar una anticipación negativa para filtrar las cosas que no deseas incluir en tu partida. Por ejemplo, hacer coincidir un <div, seguido de cualquier cosa y luego otro <div, puede coincidir con cosas como <div></div><div>.

En cambio, lo que puede decir es hacer coincidir <div, seguido de cualquier cosa, siempre que no sea </div>, y luego otro <div.

<div    (?:(?!</div>).)*    <div

Luego, puede insertar ese mismo subpatrón en cualquier lugar de su expresión donde normalmente escribiría .*. En este caso particular, puede repetir eso para asegurarse de que no está alcanzando un div de cierre antes de que UPC y luego continúen con la porción {{ UPC }}.

<div(?:(?!</div>).)*<div    (?:(?!</div>).)*    {{ upc }}    .*?</div>\s*</div>

Aquí hay una demostración

0
Quixrick 27 abr. 2020 a las 15:06

Debe analizar los div que desee y luego absorber todo lo que contiene y excluir el resto.

[\w\W] significa palabras coincidentes y no palabras. Por ejemplo, coincide con los caracteres de nueva línea, que * no.

[\w\W]*(<div[\w\W]*?<div[\w\W]*?{{ sku }}[\w\W]*?<\/div>[\w\W]*?<\/div>)[\w\W]*

0
samthegolden 20 abr. 2020 a las 12:45