Existe-t-il une fonction php capable d'extraire une phrase entre 2 caractères différents dans une chaîne? Quelque chose comme substr ();
Exemple:
$String = [modid=256];
$First = "=";
$Second = "]";
$id = substr($string, $First, $Second);
Donc $id
serait 256
Toute aide serait appréciée :)
utiliser ce code
$input = "[modid=256]";
preg_match('~=(.*?)]~', $input, $output);
echo $output[1]; // 256
exemple de travail http://codepad.viper-7.com/0eD2ns
Utilisation:
<?php
$str = "[modid=256]";
$from = "=";
$to = "]";
echo getStringBetween($str,$from,$to);
function getStringBetween($str,$from,$to)
{
$sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
return substr($sub,0,strpos($sub,$to));
}
?>
$String = "[modid=256]";
$First = "=";
$Second = "]";
$Firstpos=strpos($String, $First);
$Secondpos=strpos($String, $Second);
$id = substr($String , $Firstpos, $Secondpos);
Regular Expression est votre ami.
preg_match("/=(\d+)\]/", $String, $matches);
var_dump($matches);
Cela correspond à n'importe quel nombre, pour d'autres valeurs, vous devrez l'adapter.
Vous pouvez utiliser une expression régulière:
<?php
$string = "[modid=256][modid=345]";
preg_match_all("/\[modid=([0-9]+)\]/", $string, $matches);
$modids = $matches[1];
foreach( $modids as $modid )
echo "$modid\n";
$str = "[modid=256]";
preg_match('/\[modid=(?P<modId>\d+)\]/', $str, $matches);
echo $matches['modId'];
(déplacé du commentaire parce que le formatage est plus facile ici)
cela pourrait être une approche paresseuse, mais dans de tels cas, je commencerais généralement par faire exploser ma chaîne comme ceci:
$string_array = explode("=",$String);
et dans un deuxième temps je me débarrasserais de ce "]" peut-être par le biais de rtrim:
$id = rtrim($string_array[1], "]");
... mais cela fonctionnera uniquement si la structure est toujours exactement la même ...
-à votre santé-
ps: ne devrait-il pas s'agir de $ String = "[modid = 256]";?
Essayez l'expression régulière
$String =" [modid=256]";
$result=preg_match_all('/(?<=(=))(\d+)/',$String,$matches);
print_r($matches[0]);
Sortie
Tableau ([0] => 256)
Explication Ici, on utilise le regard positif derrière (? <=) Dans une expression régulière par exemple (? <= foo) bar correspond à bar lorsqu'il est précédé de foo, ici (? <= (=)) (\ d +), on fait correspondre le (\ d +) juste après le signe '=' .\d Correspond à n'importe quel caractère numérique (0-9) . + Correspond à au moins un des jetons précédents