2010-03-27 6 views
2

J'ai une chaîne suivante et je veux extraire image123.jpg.Comment extraire seulement une partie de chaîne en PHP?

..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length 

image123 peut avoir une longueur quelconque (newimage123456 etc) et avec l'extension de jpg, jpeg, gif ou png.

Je suppose que je dois utiliser preg_match, mais je ne suis pas vraiment sûr et aime savoir comment le coder ou s'il y a d'autres manières ou fonction que je peux employer.

Toute aide sera appréciée.

+0

si le balisage est autour, pensez à utiliser DOM, XPath ou SimpleHTML – Gordon

Répondre

5

Vous pouvez utiliser:

if(preg_match('#".*?\/(.*?)"#',$str,$matches)) { 
    $filename = $matches[1]; 
} 

Sinon, vous pouvez extraire tout le chemin entre les guillemets doubles en utilisant preg_match puis extraire le nom du chemin en utilisant la fonction basename:

if(preg_match('#"(.*?)"#',$str,$matches)) { 
    $path = $matches[1]; // extract the entire path. 
    $filename = basename ($path); // extract file name from path. 
} 
5

Qu'en est quelque chose comme ceci:

$str = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length'; 
$m = array(); 
if (preg_match('#".*?/([^\.]+\.(jpg|jpeg|gif|png))"#', $str, $m)) { 
    var_dump($m[1]); 
} 

Qui, ici, vous donnera:

string(12) "image123.jpg" 

Je suppose que le modèle pourrait être un peu plus simple - on ne pouvait pas vérifier l'extension, par exemple, et d'accepter tout type de fichier; mais je ne suis pas sûr que cela conviendrait à vos besoins.


En fait, ici, le motif:

  • commence par un "
  • prend un certain nombre de caractères jusqu'à ce qu'un /: .*?/
  • prend alors un certain nombre de caractères qui ne sont pas un . : [^\.]+
  • puis vérifie un point: \.
  • vient alors l'extension - l'un de ceux que vous décidé de permettre: (jpg|jpeg|gif|png)
  • et, enfin, la fin du modèle, une autre "

Et toute la partie du motif qui correspond au nom de fichier est entouré de (), il est donc capturé - retourné dans $m

1
$string = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length'; 
$data = explode('"',$string); 
$basename = basename($data[1]); 
+0

impressionnant - très compact et au point. – ProfVersaggi

Questions connexes