2010-07-25 9 views
5

Supponiamo che io ho il seguente:Come usare la funzione explode in PHP usando 2 delimitatori invece di 1?

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

Come potrei esplodere per ottenere il contenuto all'interno delle parentesi. Se il contenuto della stringa sono stati separati da un solo simbolo invece di 2 avrei usato:

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

Ma come fare questo quando 2 delimitatori vengono utilizzati per incapsulare gli elementi per esplodere?

risposta

6

È necessario utilizzare preg_split o preg_match.

Esempio:

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

Avviso l'ordine è importante.

+0

Ciao, non molto bravo a scrivere il regola dell'espressione regolare necessaria per andare all'interno della funzione di suddivisione di preg. Come dovrebbe andare per abbinare i contenuti all'interno di()? – Georgy

4

Se non esiste una parentesi di nidificazione, è possibile utilizzare l'espressione regolare.

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

Risultato:

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

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

3

Se si sa per certo che le stringhe saranno sempre della forma (a) (b) (c), con proprio uno spazio tra ogni coppia di parentesi e con nessun carattere all'inizio o alla fine, è possibile evitare di dover utilizzare le funzioni regexp:

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

Se i delimitatori sono coerenti così, allora si può fare questo

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

Perché non tagliare prima? –

+0

Buon punto! Ad ogni modo, però, l'OP può ancora esplodere su ") (" e ottenere ciò di cui ha bisogno. – dockeryZ

1

Prova il codice qui sotto:

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

uscita:

Array ([0] => Welcome to [1] => London) hello) 
Array ([0] => London [1] => hello) 
Problemi correlati