Preg_replace kullanarak birden çok hatları üzerinden metni değiştirmek için nasıl

3 Cevap

Merhaba birden fazla satır uzanan bir html sayfası içinde aşağıdaki içeriğe sahip

<div class="c-fc c-bc" id="content">
                <span class="content-heading c-hc">Heading 1 </span><br />
                The Home Page must provide a introduction to the services provided.<br />
                <br />
                <span class="c-sc">Sub Heading</span><br />
                The Home Page must provide a introduction to the services provided.<br />
                <br />
                <span class="c-sc">Sub Heading</span><br /> 
                The Home Page must provide a introduction to the services provided.<br />
            </div>

Ben özel metin <div class="c-fc c-bc" id="content"> ve </div> arasında everthing değiştirmeniz gerekiyor

Bunu gerçekleştirmek için aşağıdaki kodu kullanabilirsiniz ama birden fazla satır ise çalışmak istemiyor, ama evertinh bir çizgide olup olmadığını çalışır

$body = file_get_contents('../../templates/'.$val['url']);

$body = preg_replace('/<div class=\"c\-fc c\-bc\" id=\"content\">(.*)<\/div>/','<div class="c-fc c-bc" id="content">abc</div>',$body);

Ben bir şey eksik?

3 Cevap

Bu HTML olmasaydı, ben . gelen anlamını değiştirmek için DOTALL değiştirici kullanmak size söylerdim 'her şeyi karşılayan' için 'yeni satır hariç her şeyi maç':

preg_replace('/(.*)<\/div>/s','abc',$body);

Ama bu HTML, yani yerine bir HTML çözümleyici kullanabilirsiniz.

o sağlayan, "s" bayrağıdır. satırsonlarını yakalamak için

Bu html veri parçalarını dışarı şerit regex kullanmak mümkündür, ancak tarayıcılar tarafından göz ardı olsun özel html etiketleri ile html kaydırmak gerekir. Örneğin:

<?php
$html='
<div>This will be shown</div>
<custom650 rel="nofollow">
  <p class="subformedit">
    <a href="#" class="mylink">Link</a>
    <div class="morestuff">
      ... more html in here ...
    </div>
  </p>
</custom650>
<div>This will also be shown</div>
';

= "Nofollow" niteliklerini rel etiketleri şerit için aşağıdaki regex kullanabilirsiniz:

$newhtml = preg_replace('/<([^\s]+)[^>]*rel="nofollow"[^>]*>.*?<\/\1>/si', '', $html);

Deneyim, yeni bir hat üzerinde özel etiketler başlar. Kuşkusuz kesmek, ama birisi yardımcı olabilir.