2013-04-02 3 views
-3

J'ai une chaîne qui inclut une double ou simple citation. Ce que je dois faire est de faire écho tout entre citation:Obtenir une chaîne entre guillemets

$str = "'abc de', xye, jhy, jjou"; 
$str2 = "\"abc de\", xye, jhy, jjou"; 

Je ne me dérange pas avec les expressions régulières (preg_match), ou tout autre php fonction intégrée.

Veuillez nous consulter.

Cordialement,

+7

Cette question ne montre aucun effort de recherche. Il est important de ** faire vos devoirs **. Dites-nous ce que vous avez trouvé et pourquoi *** ça n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de répéter des réponses évidentes, et surtout, cela vous aide à obtenir une réponse plus spécifique et pertinente. [FAQ] (http://stackoverflow.com/questions/how-to-ask). –

+0

Je n'ai pas beaucoup de connaissances sur l'expression régulière. J'aurais pu essayer d'autres fonctions mais peu importe ce que je sais, je dois connaître la position de la corde. dans ce cas, la citation ne sera pas toujours à la première place. –

Répondre

6

Utilisation preg_match_all:

$str = "'abc de', xye, \"jhy\", blah blah 'bob' \"gfofgok\", jjou"; 
preg_match_all('/".*?"|\'.*?\'/', $str, $matches); 
print_r($matches); 

Ce retour:

Array ( 
    [0] => Array ( 
     [0] => 'abc de' 
     [1] => "jhy" 
     [2] => 'bob' 
     [3] => "gfofgok" 
    ) 
) 

Explication des expressions rationnelles:

" -> Match a double quote 
.* -> Match zero or more of any character 
?" -> Match as a non-greedy match until the next double quote 
| -> or 
\' -> Match a single quote 
.* -> Match zero or more of any character 
?\' -> Match as non-greedy match until the next single quote. 

Alors $matches[0] est un tableau qui contient toutes les chaînes qui existent à l'intérieur des guillemets simples ou doubles .

+0

Pourquoi ne pas les combiner en un seul, comme '(['"]) (. *?) \ 1'? – Wiseguy

+0

oui, j'espérais obtenir quelque chose de combiné.Cela ira dans la boucle foreach –

+0

@HassanZ I' J'ai mis à jour ma réponse –

0

Pour cette situation, vous pouvez utiliser le explode construit en fonction:

function getBetween($string){ 
    //explode the string 
    $exploded=explode("'",$string); 
    //print using foreach loop or in any way you want 
    foreach($exploded as $explode){ 
     echo $explode.'<br/>'; 
    } 
} 
+0

Ceci ne couvre pas le cas avec des guillemets. La fonction est également censée imprimer uniquement les chaînes entre guillemets. – Quasdunk

1

regex ne sont pas si compliqué que ça, même si elles font peur au début de jeter un oeil sur un tutoriel ou sur son documentation, il effacera beaucoup

selon votre problème un coup d'oeil sur ce sujet et essayer de le comprendre avant de l'utiliser

$str = "'abc de', xye, jhy, jjou"; 
$str2 = "\"abc de\", xye, jhy, jjou"; 
$match = $match2 = array(); 
preg_match("/'(.+)'/", $str, $match); 
preg_match("/\"(.+)\"/", $str2, $match2); 
print_r($match); 
print_r($match2); 
Questions connexes