2010-01-12 20 views
12

Estoy queriendo usar "palabras clave" dentro de una cadena grande. Estas palabras clave comienzan y terminan usando my_keyword y están definidas por el usuario. ¿Cómo, dentro de una cadena grande, puedo buscar y encontrar lo que está entre los dos * caracteres y devolver cada instancia?PHP: cadena de retorno entre dos caracteres

La razón por la que podría cambiarlo, es que partes de las palabras clave pueden ser definidas por el usuario, como page_date_Y, que pueden mostrar el año en el que se creó la página.

Así que, de nuevo, solo tengo que hacer una búsqueda y devolver lo que hay entre esos * caracteres. ¿Es posible o hay una mejor manera de hacerlo si no conozco la longitud de la "palabra clave" o lo que podría ser?

+0

encontré una super agradable función que hace exactamente lo que quiero, pero quiero poner todas las palabras clave que se encuentran en una matriz. http://www.justin-cook.com/wp/2006/03/31/php-parse-a-string-between-two-strings/ ¿Alguien tiene consejos sobre cómo podría modificar ese script? –

+0

Espero que el usuario no pueda definir una palabra clave con * en ella;) – zombat

+0

Estoy usando la función en el enlace de arriba que me ha dado y está funcionando bien para mí .... – Avinash

Respuesta

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

Salida:

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

¡Brillante! Y tan simple. ¡Gracias! –

+1

respuesta simple pero potente ... ¡aplausos! – VKGS

0

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

Uso de la función como esta:

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

explotar en la "*"

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

salida

$ php test.php 
best 
its 
most popular 
I 
Cuestiones relacionadas