2010-01-12 5 views
12

Je souhaite utiliser des "mots-clés" dans une grande chaîne. Ces mots clés commencent et se terminent en utilisant my_keyword et sont définis par l'utilisateur. Comment, au sein d'une grande chaîne, puis-je rechercher et trouver ce qui est entre les deux * caractères et retourner chaque instance?PHP: Renvoie une chaîne entre deux caractères

La raison pour laquelle il pourrait changer, que certaines parties des mots-clés peuvent être définis par l'utilisateur, tels que page_date_Y qui pourrait montrer l'année où la page a été créée.

Donc, encore une fois, je dois juste faire une recherche et retourner ce qui est entre ces * caractères. Est-ce possible, ou y a-t-il une meilleure façon de le faire si je ne connais pas la longueur du "mot clé" ou ce que je pourrais être?

+0

J'ai trouvé une fonction super sympa qui fait exactement ce que je veux, mais je veux mettre tous les mots-clés trouvés dans un tableau. http://www.justin-cook.com/wp/2006/03/31/php-parse-a-string-between-two-strings/ Est-ce que quelqu'un a des astuces sur comment je pourrais modifier ce script? –

+0

J'espère que l'utilisateur ne peut pas définir un mot-clé avec un * en elle;) – zombat

+0

J'utilise la fonction dans le lien ci-dessus que vous avez donné et son travail bien pour moi .... – Avinash

Répondre

42
<?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]);    
} 
?> 

Sortie:

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

Brillant! Et si simple. Je vous remercie! –

+1

réponse simple mais puissante ... à la vôtre! – VKGS

0

Here ya go:

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!'; 
    } 
} 

Utilisez la fonction comme ceci:

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

sur Explode "*"

$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";  
} 

sortie

$ php test.php 
best 
its 
most popular 
I 
Questions connexes