2010-07-25 21 views
5

Supongamos que tengo el siguiente:¿Cómo utilizar la función de explotar en PHP usando 2 delimitadores en lugar de 1?

$string = "(a) (b) (c)"; 

¿Cómo iba a explotar para obtener el contenido dentro del paréntesis. Si el contenido de la cadena estaban separados por sólo un símbolo en lugar de 2 habría utilizado:

$string = "a-b-c"; 
explode("-", $string); 

Pero cómo hacer esto cuando se usan 2 delimitadores para encapsular los elementos que se explotaron?

Respuesta

6

usted tiene que utilizar preg_split o preg_match lugar.

Ejemplo:

$string = "(a) (b) (c)"; 
print_r(preg_split('/\\) \\(|\\(|\\)/', $string, -1, PREG_SPLIT_NO_EMPTY)); 
 
Array 
(
    [0] => a 
    [1] => b 
    [2] => c 
) 

Aviso el orden es importante.

+0

Hola, no es muy bueno en la escritura de la regla de expresión regular necesaria para entrar en la función de división de preg. ¿Cómo sería eso para que coincida con el contenido dentro de()? – Georgy

4

Si no hay paréntesis de anidación, se puede usar una expresión regular.

$string = "(a) (b) (c)"; 
$res = 0; 
preg_match_all("/\\(([^)]*)\\)/", $string, $res); 
var_dump($res[1]); 

Resultado:

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "c" 
} 

Ver http://www.ideone.com/70ZlQ

3

Si sabe que es un hecho que las cadenas serán siempre de la forma (a) (b) (c), precisamente, con un espacio entre cada par de paréntesis y con sin caracteres al principio o al final, puede evitar tener que usar las funciones de expresión regular:

$myarray = explode(') (', substr($mystring, 1, -1)); 
0

Si los delimitadores son consistentes así, entonces usted puede hacer esto

$string = "(a) (b) (c)"; 
$arr = explode(") (", $string); 
// Then simply trim remaining parentheses off. 
$arr[0] = trim($arr[0], "()"); 
end($arr) = trim($arr[0], "()"); 
+0

¿Por qué no recortar primero? –

+0

¡Buen punto! De cualquier manera, el OP aún puede explotar en ") (" y obtener lo que necesita. – dockeryZ

1

Pruebe el código de abajo:

<?php 
    $s="Welcome to (London) hello ";  
    $data = explode('(' , $s);  
    $d=explode(')',$data[1]);  
    print_r($data);  
    print_r($d);  
?>   

Salida:

Array ([0] => Welcome to [1] => London) hello) 
Array ([0] => London [1] => hello) 
Cuestiones relacionadas