regex — php разбивает строку на массив с метасимволами

Я хочу разбить строку в массив. Я хочу, чтобы слова и метасимволы разделялись в массиве.
Как это:

$string = 'This is a string? Or an array?';

я хочу:

array[0] = 'This',
array[1] = 'is',
array[2] = 'a',
array[3] = 'string',
array[4] = '?',
array[5] = 'Or',
array[6] = 'etc';

Я знаю что надо использовать preg_split, Но я могу управлять только выбором строк или без строки. И я искал в Интернете, но я мог только найти примеры без метасимволов.
Я надеюсь, что кто-то знает ответ, потому что я его в разделитель preg_spilt,

Спасибо за ваше время.

1

Решение

Вы могли бы сделать:

 $string= 'This is a string? Or an array?';
$array = array_filter(array_map('trim',preg_split("/\b/", $string)));
print_r($array);

Печать:

Array
(
[1] => This
[3] => is
[5] => a
[7] => string
[8] => ?
[9] => Or
[11] => an
[13] => array
[14] => ?
)

То, что здесь происходит, ты разделяешь \b который является границей слова. Причина обрезки и фильтрации заключается в том, что это также соответствует пробелам.

3

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

Вы можете попробовать с explode() тоже:

$string= 'This is a string? Or an array?';
$replaced_string = str_replace("?", " ?", $string);
$array = explode(" ", $replaced_string);

for ($i = 0; $i < count($array); $i++){
echo $array[$i]."<br>";
}

Результат:

This<br>
is<br>
a<br>
string<br>
?<br>
Or<br>
an<br>
array<br>
?

Или сделать это:

for ($i = 0; $i < count($array); $i++){
echo 'array['.$i.']='.$array[$i]."<br>";
}

Результат:

array[0]=This<br>
array[1]=is<br>
array[2]=a<br>
array[3]=string<br>
array[4]=?<br>
array[5]=Or<br>
array[6]=an<br>
array[7]=array<br>
array[8]=?
0

По вопросам рекламы [email protected]