2012-05-21 1 views
1

Я хотел бы разделить строку на массив символов, как бы я это сделал? Я замечаю, что preg_split принимает строковый ввод, а не массив.php: как разбить строку на массив символов?

Например, вот мой массив:

$splitting_strings = array(".", ";", "-", "and", "for");

$text = "What a great day, and I love it. Who knows; maybe I will go.";

$result = array (
0 => "What a great day", 
1 => "I love it", 
2 => "Who knows", 
3 => "maybe I will go"); 

ответ

2

Вы можете передать preg_split() следующее:

$regex = '/(' . implode('|', $splitting_strings) . ')/'; 

Вам нужно будет, чтобы избежать какой-либо специальный regex chara такие как .. Таким образом, вы должны закончить с чем-то вроде этого, вместо:

// run through each element in the array escaping any 
// special regex chars 
$splitting_strings = array_map(function($string) { 
            return preg_quote($string); 
           }, $splitting_strings); 

$regex = '/(' . implode('|', $splitting_strings) . ')/'; 
$final_array = preg_split($regex, $splitting_strings); 

Выход $final_array после всего этого:

array(5) { 
    [0]=> 
    string(18) "What a great day, " 
    [1]=> 
    string(10) " I love it" 
    [2]=> 
    string(10) " Who knows" 
    [3]=> 
    string(16) " maybe I will go" 
    [4]=> 
    string(0) "" 
} 
+0

Спасибо, это должно быть круглыми скобками нет? [и] также соответствует «dna», так как квадратные скобки для классов символов, а круглые скобки для группировки, насколько я понимаю. – giorgio79

+1

Да, это должно быть() вместо [] – erdeszt

+0

Я обновил это, но это означает, что теперь вам нужно избежать символов регулярных выражений, таких как '.', чтобы остановить его от разделения на все! :) – Treffynnon

 Смежные вопросы

  • Нет связанных вопросов^_^