2011-07-02 3 views
1

Comment puis-je obtenir la valeur des balises suivantes:Obtenez du texte entre deux balises

{desc=1} 
This is a description 
{/desc} 

Le nombre dans le {desc=1} est en train de changer. Je veux avoir la valeur aussi.

mise à jour:

également possible d'être plus desc dans la chaîne, par exemple

{desc=1} 
    This is a description 
{/desc} 
{desc=2} 
    other description 
{/desc} 
... 
+0

Vous devez utiliser XML. Cela rendrait tout plus facile. – esqew

+0

Peuvent-ils être imbriqués? – Dogbert

+0

@Dogbert: Non, il ne peut pas –

Répondre

5

Cette capture tout ce que vous voulez.

$data = <<<EOT 
{desc=1} 
    This is a description 
{/desc} 
{desc=2} 
    other description 
{/desc} 
EOT; 

preg_match_all('#{desc=(\d+)}(.*?){/desc}#s', $data, $matches); 

var_dump($matches); 

Sortie:

array(3) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(44) "{desc=1} 
    This is a description 
{/desc}" 
    [1]=> 
    string(40) "{desc=2} 
    other description 
{/desc}" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(1) "2" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(29) " 
    This is a description 
" 
    [1]=> 
    string(25) " 
    other description 
" 
    } 
} 
+0

Je n'ai qu'une seule question, quel est le # dans la mendicité et #s à la fin? –

+2

@iUngi, PHP vous permet d'utiliser plusieurs caractères différents pour échapper à une regex (autre que '/'). Je l'ai utilisé pour que je n'aie pas à échapper '/' avec '\ /' si je devais les utiliser littéralement. – Dogbert

0

essayer cette

function getInbetweenStrings($start, $end, $str){ 
    $matches = array(); 
    $regex = "/$start([a-zA-Z0-9_]*)$end/"; 
    preg_match_all($regex, $str, $matches); 
    return $matches[1]; 
} 

$str = "{attr1}/{attr2}/{attr3}"; 
$str_arr = getInbetweenStrings('{', '}', $str); 

print_r($str_arr); 

dans l'exemple ci-dessus {et} sont les balises, en entre eux la chaîne est extrait obtenir.

1

Une autre façon très simple est de créer une fonction simple qui peut être invoquée à tout moment.

<?php 
    // Create the Function to get the string 
    function GetStringBetween ($string, $start, $finish) { 
    $string = " ".$string; 
    $position = strpos($string, $start); 
    if ($position == 0) return ""; 
    $position += strlen($start); 
    $length = strpos($string, $finish, $position) - $position; 
    return substr($string, $position, $length); 
    } 
?> 

et est ici un exemple d'utilisation pour votre question

$string1=" 
{desc=1} 
This is a description 
{/desc}"; 

$string2=" 
{desc=1} 
This is a description 
{/desc} 
{desc=2} 
    other description 
{/desc}"; 

echo GetStringBetween ($string1, "{desc=1}", "{/desc}"); 
echo GetStringBetween ($string2, "{desc=1}", "{/desc}"); 
echo GetStringBetween ($string2, "{desc=2}", "{/desc}"); 

Pour plus de détails s'il vous plaît lire http://codetutorial.com/howto/how-to-get-of-everything-string-between-two-tag-or-two-strings.

Questions connexes