Вставьте пробел после каждого не алфавитно-цифрового символа

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

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

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

Другие решения

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

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

Это похоже на PHP — перебирать строковые символы

В основном использовать 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";
?>

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

0