PHP 文本到数组正则表达式
PHP text to Array Regex
我需要由“~(从 0 到 13 的数字)”分隔并以“~ end”结尾的文本,数组的每个位置都应该有大括号之间的文本。有人有想法吗?
TEXT:(原文有湖文,可能html)
~0
aaaaaa1
aaaaaaaaaa
~1
bbbbbbbbbb
sdf23
324 <br>
sdfs
~2
cccccccccc
~3
ddddddddddd
~13
eeeeeeeeeee
~14
fffffffffff
~end
数组结束:
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 开始时才有效或它们并不重要。
编辑: 如果你想 trim 过程中的结果字符串,你不应该只向正则表达式添加任何字符,点 .
;这可以从您的结果中删除有效字符。
相反,只删除白色-space:
$arr = preg_split('/\s*~\d{1,2}\s*/', $texto);
\s*
表示 0 到任意数量的白色-space 字符(space、制表符、换行符等)。
$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 到 13 的数字)”分隔并以“~ end”结尾的文本,数组的每个位置都应该有大括号之间的文本。有人有想法吗?
TEXT:(原文有湖文,可能html)
~0
aaaaaa1
aaaaaaaaaa
~1
bbbbbbbbbb
sdf23
324 <br>
sdfs
~2
cccccccccc
~3
ddddddddddd
~13
eeeeeeeeeee
~14
fffffffffff
~end
数组结束:
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 开始时才有效或它们并不重要。
编辑: 如果你想 trim 过程中的结果字符串,你不应该只向正则表达式添加任何字符,点 .
;这可以从您的结果中删除有效字符。
相反,只删除白色-space:
$arr = preg_split('/\s*~\d{1,2}\s*/', $texto);
\s*
表示 0 到任意数量的白色-space 字符(space、制表符、换行符等)。
$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>";