Мне нужен текст, разделенный символом «~ (число от 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$
Спасибо
я хотел бы использовать preg_split()
вместо:
$arr = preg_split('/~\d{1,2}/', $texto);
Не нужно захватывать все промежуточное.
Конечно, это будет работать, только если ключи последовательные и начинаются с 0 или же они не имеют значения.
Редактировать: Если вы хотите обрезать получающиеся строки в процессе, вы не должны просто добавлять какой-либо символ в регулярное выражение, точку .
; это может удалить действительные символы из ваших результатов.
Вместо этого, только удалите пробел с этим:
$arr = preg_split('/\s*~\d{1,2}\s*/', $texto);
\s*
означает 0 для любого количества символов пробела (пробелы, табуляции, новые строки и т. д.).
$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>";