recorrer - Extrae una subcadena entre dos caracteres en una cadena PHP
recorrer string php (10)
Prueba la expresión regular
$String =" [modid=256]";
$result=preg_match_all(''/(?<=(=))(/d+)/'',$String,$matches);
print_r($matches[0]);
Salida
Matriz ([0] => 256)
Explicación Aquí se usa la mirada positiva detrás (? <=) En la expresión regular, por ej. (? <= Foo) la barra coincide con la barra cuando está precedido por foo, aquí (? <= (=)) (/ D +) hacemos coincidir el (/ d + ) justo después del signo ''=''. / d Coincide con cualquier carácter de dígito (0-9). + Coincide con 1 o más de los token precedentes
¿Hay una función php que pueda extraer una frase entre 2 caracteres diferentes en una cadena? Algo así como substr ();
Ejemplo:
$String = [modid=256];
$First = "=";
$Second = "]";
$id = substr($string, $First, $Second);
Por lo tanto, $id
sería 256
Cualquier ayuda sería apreciada :)
Puede usar una expresión regular o puede intentar esto:
$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
}
Deberías leer sobre substr. La mejor manera para esto es una expresión regular.
Puedes usar una expresión regular:
<?php
$string = "[modid=256][modid=345]";
preg_match_all("//[modid=([0-9]+)/]/", $string, $matches);
$modids = $matches[1];
foreach( $modids as $modid )
echo "$modid/n";
Regular Expression es tu amigo.
preg_match("/=(/d+)/]/", $String, $matches);
var_dump($matches);
Esto coincidirá con cualquier número, para otros valores tendrá que adaptarlo.
Utilizar:
<?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));
}
?>
usa este código
$input = "[modid=256]";
preg_match(''~=(.*?)]~'', $input, $output);
echo $output[1]; // 256
ejemplo de trabajo http://codepad.viper-7.com/0eD2ns
(movido de comentario porque el formateo es más fácil aquí)
podría ser un enfoque perezoso, pero en tales casos usualmente explotaría mi cadena de esta manera:
$string_array = explode("=",$String);
y en un segundo paso me desharía de eso "]" quizás a través de rtrim:
$id = rtrim($string_array[1], "]");
... pero esto solo funcionará si la estructura es siempre la misma ...
-aclamaciones-
ps: ¿no debería ser realmente $ String = "[modid = 256]"; ?
$String = "[modid=256]";
$First = "=";
$Second = "]";
$Firstpos=strpos($String, $First);
$Secondpos=strpos($String, $Second);
$id = substr($String , $Firstpos, $Secondpos);
$str = "[modid=256]";
preg_match(''//[modid=(?P<modId>/d+)/]/'', $str, $matches);
echo $matches[''modId''];