2010-07-25 6 views

Odpowiedz

6

Zamiast tego należy użyć preg_split lub preg_match.

przykład:

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

Wskazówki polecenie jest ważne.

+0

Witam, nie bardzo dobry w pisanie reguła wyrażeń regularnych potrzebna do przejścia do funkcji podziału preg. Jak by to pasowało do zawartości wewnątrz()? – Georgy

4

Jeśli nie ma nawiasu zagnieżdżającego, można użyć wyrażenia regularnego.

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

Wynik:

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

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

3

Jeśli wiesz na pewno, że struny zawsze będzie od formy (a) (b) (c), z dokładnie jednej przestrzeni pomiędzy każdą parą nawiasów oraz z brak znaków na początku lub na końcu, można uniknąć konieczności korzystania z funkcji wyrażeń regularnych:

0

Jeśli ograniczniki są zgodne tak, to można to zrobić

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

Dlaczego nie przyciąć najpierw? –

+0

Dobra uwaga! Tak czy inaczej, OP może nadal eksplodować w ") (" i dostać to, czego potrzebuje. – dockeryZ

1

Spróbuj poniższy kod:

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

wyjściowa:

Array ([0] => Welcome to [1] => London) hello) 
Array ([0] => London [1] => hello) 
Powiązane problemy