PHP: İki karakter arasındaki dön dizesi

4 Cevap php

Ben büyük bir dize içinde "anahtar kelimeler" kullanmak isteyen duyuyorum. Bu anahtar kelimeler başlangıç ​​ve bitiş kullanarak * my_keyword * ve kullanıcı tanımlı. Nasıl büyük bir dizge içinde, ben arama ve ne iki * karakter arasında bulmak ve her örneği dönebilirsiniz?

Nedeni anahtar kelimelerin parçaları gibi * page_date_Y * sayfa oluşturulduğu yıl göstermek olabilir gibi kullanıcı tanımlı olabilir ki, bu değişebilir.

Yani, yine, ben sadece bir arama yapmak ve bu * karakterler arasında ne dönmek gerekiyor. Bu mümkün mü, ya da ben "anahtar kelime" uzunluğunu veya i olabilir ne bilmiyorsanız bunu yapmanın daha iyi bir yolu var mı?

4 Cevap

<?php
// keywords are between *
$str = "PHP is the *best*, its the *most popular* and *I* love it.";    
if(preg_match_all('/\*(.*?)\*/',$str,$match)) {            
        var_dump($match[1]);            
}
?>

Çıktı:

array(3) {
  [0]=>
  string(4) "best"
  [1]=>
  string(12) "most popular"
  [2]=>
  string(1) "I"
}

"*" Patlayabilir

$str = "PHP is the *best*, *its* the *most popular* and *I* love it.";
$s = explode("*",$str);
for($i=1;$i<=count($s)-1;$i+=2){
    print $s[$i]."\n";    
}

çıktı

$ php test.php
best
its
most popular
I

İşte böyle:

function stringBetween($string, $keyword)
{
    $matches = array();
    $keyword = preg_quote($keyword, '~');

    if (preg_match_all('~' . $keyword . '(.*?)' . $keyword . '~s', $string, $matches) > 0)
    {
        return $matches[1];
    }

    else
    {
        return 'No matches found!';
    }
}

Bu gibi işlevini kullanın:

stringBetween('1 *a* 2 3 *a* *a* 5 *a*', '*a*');

Eğer (parantez içinde bir şey gibi, parantez, html etiketleri, vb) iki different dizeleri ile kapalı olan bir dize ayıklamak istiyorsanız, burada daha özel bir yazı var:

Grabbing a String Between Different Strings