Извлечение подстроки между двумя символами в строке PHP
10 ответов
используйте этот код
$input = "[modid=256]";
preg_match('~=(.*?)]~', $input, $output);
echo $output[1]; // 256
использование:
<?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);
регулярное выражение-ваш друг.
preg_match("/=(\d+)\]/", $String, $matches);
var_dump($matches);
Это будет соответствовать любому числу, для других значений вам придется адаптировать его.
вы можете использовать регулярное выражение:
<?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'];
(перемещено из комментария, потому что формирование здесь проще)
может быть ленивый подход, но в таких случаях я обычно сначала взрывают мою строку, как это:
$string_array = explode("=",$String);
и на втором шаге я бы избавился от этого"]", возможно, через rtrim:
$id = rtrim($string_array[1], "]");
...но это будет только работа, если структура всегда точно такая же...
-ура-
ps: не должно ли это быть $String = " [modid=256]"; ?
Попробуйте Регулярное Выражение
$String =" [modid=256]";
$result=preg_match_all('/(?<=(=))(\d+)/',$String,$matches);
print_r($matches[0]);
выход
массив ( [0] => 256 )
объяснение Здесь его использовали положительный взгляд позади (?
вы можете использовать регулярное выражение или попробовать следующее:
$String = "[modid=256]";
$First = "=";
$Second = "]";
$posFirst = strpos($String, $First); //Only return first match
$posSecond = strpos($String, $Second); //Only return first match
if($posFirst !== false && $posSecond !== false && $posFirst < $posSecond){
$id = substr($string, $First, $Second);
}else{
//Not match $First or $Second
}
вы должны прочитать о substr. Лучший способ для этого-регулярное выражение.