PHP текст в массив Regex

Мне нужен текст, разделенный символом «~ (число от 0 до 13)» и заканчивающийся на «~ конец», каждая позиция массива должна иметь текст, который находится между фигурными скобками. У кого-нибудь есть идея?

Текст: (Оригинал имеет текст озера и, возможно, HTML)

 ~0
aaaaaa1
aaaaaaaaaa
~1
bbbbbbbbbb
sdf23
324 <br>
sdfs
~2
cccccccccc
~3
ddddddddddd

~13
eeeeeeeeeee

~14
fffffffffff
~end

END Array:

 Array
(
[0] =>  aaaaaa1
aaaaaaaaaa

[1] => bbbbbbbbbbb
sdf23
324 <br>
sdfs

[2] => cccccccccc

[3] => dddddddddd
.
.
.
.
[13] => eeeeeee

[14] => fffffff)

Мой PHP с регулярным выражением: (сбой)

$texto = "~0
123hola321
yyyyyyyyyyy
~1
rrrrrrrrrrrr
sdf23
324 <br>
sdfs
~2
cccccccccc
~3
ddddddddddd

~13
ddddddddddd

~14
ddddddddddd
~end  ";$regex = '/^~(\d{1,2}.\n)(.*?)/m';
echo $regex;
preg_replace($regex,$texto,$matches);echo "<pre>";
print_r($matches);
echo "</pre>";

//      ^~(\d{1,2}.\n)

// ~\d{1,2} (.*?)2$
//
//  ^~\d{1,2}(.*?)end$

Спасибо

1

Решение

я хотел бы использовать preg_split() вместо:

$arr = preg_split('/~\d{1,2}/', $texto);

Не нужно захватывать все промежуточное.

Конечно, это будет работать, только если ключи последовательные и начинаются с 0 или же они не имеют значения.

Редактировать: Если вы хотите обрезать получающиеся строки в процессе, вы не должны просто добавлять какой-либо символ в регулярное выражение, точку .; это может удалить действительные символы из ваших результатов.

Вместо этого, только удалите пробел с этим:

$arr = preg_split('/\s*~\d{1,2}\s*/', $texto);

\s* означает 0 для любого количества символов пробела (пробелы, табуляции, новые строки и т. д.).

1

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

$texto = "~0
123hola321
yyyyyyyyyyy
xxxxxxxx
ffffffffff
~1
rrrrrrrrrrrr
~2
cccccccccc
~3
ddddddddddd

~3
ddddddddddd
~end  ";$arr = preg_split('#~\d{1,2}.(\r\n|\n|\r)#', $texto);

echo "<pre>";
print_r($arr);
echo "</pre>";
0

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