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>";