Düzenli ifadeler ile iki etiketleri arasına şeyi Maç?

4 Cevap php

Nasıl iki etiketleri arasına (PCRE) her şeyi aynı olabilir?

Ben böyle bir şey denedim:

<- \ S * LoginStart \ s * -> (*.) <- \ S * LoginEnd \ s * ->

Ama bu benim için çok iyi işe yaramadı ..

Ben tür yeni düzenli ifadeler için yaşıyorum, bu yüzden birisi nezaketini bana açıklamak için bunu gerçekleştirmek nasıl olurdu ben umuyordum, düzenli ifadeler ile bile mümkünse.

Teşekkürler

4 Cevap

$string = '<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->';
$regex = '#<!--\s*LoginStart\s*-->(.*?)<!--\s*LoginEnds\s*-->#s';

preg_match($regex, $string, $matches);

print_r($matches); // $matches[1] = <div id="stuff">text</div>

açıklamalar:

(.*?) = non greedy match (match the first <!-- LoginEnds --> it finds
    s = modifier in $regex (end of the variable) allows multiline matches
        such as '<!-- LoginStart -->stuff
                 more stuff
                 <!-- LoginEnds -->'

PHP ve regex? İşte bazı öneriler bulunuyor:

'/<!--\s*LoginStart\s*-->(.*)<!--\s*LoginEnd\s*-->/Us'

Daha iyi olabilir - U harfle yapar regex ilk <!-- Bu işe yarayabilir durmak demektir ki, açgözlü olmayan. Ama önemli bir . karakteri ile satırbaşı maç regex söyler, s olduğunu.

Sonunda i eklerken harf üzerinde nasıl belli bağlı regex arama harf duyarsız yapacaktır.

Evet, ben de açgözlü olmayan şey hakkında bilmiyordum! Her değiştirici anlatan bir site var mı?

i Owen'ın cevabı denedim ama onun gibi koşullar için başarısız

<!-- LoginStart --><div id="stuff">text</div><!-- LoginEnds -->"DONT MIND THIS" <- LoginStart ->

yazı <- LoginEnds ->

This includes the line "DONT MIND THIS" also, that is it covers all the contents within first <!-- LoginStart --> and last <!-- LoginEnds --> tag