2014-09-15 3 views
0

Я пытаюсь вставить пробел до и после каждого алфавитно-цифрового символа в строке, например, строки вроде (good + bad) * nice, которая будет введена пользователем, я хочу, чтобы она выглядела подобный (хорошо + плохой) * хорошо. Причина, по которой я хочу это сделать, заключается в том, что я хочу поместить их в массив, который будет выглядеть следующим образом;Вставьте пробел после каждого неалфаумерного символа

$arr[0] = "("; 
    $arr[1] = "good”; 
    $arr[2] = "+”; 
    $arr[3] = "bad"; 
    $arr[4] = ")"; 
    $arr[5] = "*"; 
    $arr[6] = "+"; 
+0

Я думаю, если бы вы объяснили общую картину, можно было бы предложить лучший рапорт – 2014-09-15 23:27:20

+0

Вы пытаетесь разобрать математическое выражение, разделив его на пробелы, чтобы вы могли преобразовать его в стек для оценки? Посмотрите на [ответ ircmaxell] (http://stackoverflow.com/questions/12692727/how-to-make-a-calculator-in-php) здесь .... нет пробелов –

ответ

0

Вы можете использовать preg_split для достижения этой цели в одной строке.

$result = preg_split('/(\w+|\W)/', '(good+bad)*nice', -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); 

результат:

array(
    0 => "(" 
    1 => "good" 
    2 => "+" 
    3 => "bad" 
    4 => ")" 
    5 => "*" 
    6 => "nice" 
} 
+0

О, это то, что я хотел, есть возможность разделения) и *? – user2579351

+0

последнее обновление: – Yaroslav

+0

Yap, его рабочий, но почему он отображает нечетное число, например [1], [3] ..? – user2579351

0

Не проверял это, но вы могли бы использовать регулярное выражение для достижения этого.

s/\W/$1 /g 
0

Я считаю, что для достижения этой цели вы можете использовать preg_replace. Например:

$string = "(good+bad)"; 
echo preg_replace('/\W+/', ' $0 ', $string); 
0

Вы можете использовать preg_replace(), как:

echo preg_replace('/[^a-zA-Z0-9_ ]/', ' $0 ', '(good+bad)*nice'); 
+0

Но между ними нет места) и * – user2579351

0

Это похоже на PHP - iterate on string characters

В основном используют str_split и/или preg_Split

Взятые со страницы preg_split (и немного изменен:

<?php 
$str = "(alpah+beta)*ga/6"; 
$keywords = preg_split("/[\/\(\)\*\&\^\%\$\#\@\!\_\{\}\:\"\+\\\]/", "$str"); 
print_r($keywords); 
// now we replace the keywords with itself + a space on the left and right. 
$count = count($keywords); 

for ($i = 0; $i < $count; $i++) { 
    if ($keywords[$i] == '') { 
     unset($keywords[$i]); 
    } 

} 
var_dump($keywords); 
foreach ($keywords as &$key) { 
    $str = preg_replace("/$key/", " $key ", "$str"); 
} 
echo "Finally: $str"; 
?> 

Это был просто быстрый макет того, что сделает эту работу. (Удалите отвалы/отпечатки для производственного кода)

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