2010-01-12 17 views
12

Sto volendo utilizzare "parole chiave" all'interno di una stringa di grandi dimensioni. Queste parole chiave iniziano e finiscono utilizzando my_keyword e sono definite dall'utente. In che modo, all'interno di una stringa di grandi dimensioni, posso cercare e trovare ciò che è tra i due caratteri * e restituire ogni istanza?PHP: stringa di ritorno tra due caratteri

Il motivo potrebbe cambiarlo, che parti delle parole chiave possono essere definiti dall'utente, come ad esempio page_date_Y che potrebbe mostrare l'anno in cui è stato creato il pagina.

Quindi, ancora una volta, ho solo bisogno di fare una ricerca e restituire ciò che è tra quei * caratteri. È possibile, o c'è un modo migliore per farlo se non conosco la lunghezza della "parola chiave" o quello che potrei essere?

+0

ho trovato un super bella funzione che fa proprio quello che voglio, ma, voglio mettere tutte le parole chiave trovate in un array. http://www.justin-cook.com/wp/2006/03/31/php-parse-a-string-between-two-strings/ Qualcuno ha suggerimenti su come posso modificare tale script? –

+0

Spero che l'utente non possa definire una parola chiave con un * in esso;) – zombat

+0

Sto usando la funzione nel link precedente che hai dato e funziona bene per me .... – Avinash

risposta

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

uscita:

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

Brillante! E così semplice. Grazie! –

+1

risposta semplice ma potente ... evviva! – VKGS

0

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

Utilizzare la funzione come questa:

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

esplodere su "*"

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

uscita

$ php test.php 
best 
its 
most popular 
I 
Problemi correlati