PHP文本到数组正则表达式

Posted

技术标签:

【中文标题】PHP文本到数组正则表达式【英文标题】:PHP text to Array Regex 【发布时间】:2016-12-22 12:24:33 【问题描述】:

我需要由“~(从 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 = '/^~(\d1,2.\n)(.*?)/m';
echo $regex;
preg_replace($regex,$texto,$matches);


echo "<pre>";
print_r($matches);
echo "</pre>";

//      ^~(\d1,2.\n)    

// ~\d1,2 (.*?)2$
// 
//  ^~\d1,2(.*?)end$

谢谢

【问题讨论】:

preg_split("/~[0-9]+/", $texto); 【参考方案1】:

我会改用preg_split()

$arr = preg_split('/~\d1,2/', $texto);

无需捕获介于两者之间的所有内容。

当然,这只有在键是连续的并且从 0 开始时才有效它们无关紧要。

编辑:如果你想在这个过程中修剪结果字符串,你不应该只是在正则表达式中添加任何字符,点.;这可以从您的结果中删除有效字符。

相反,只删除空格:

$arr = preg_split('/\s*~\d1,2\s*/', $texto);

\s* 表示 0 到任意数量的空白字符(空格、制表符、换行符等)。

【讨论】:

这有助于我制定解决方案。谢谢 !!格拉西亚斯 ;)【参考方案2】:
$texto = "
~0 
123hola321
yyyyyyyyyyy
xxxxxxxx
ffffffffff
~1 
rrrrrrrrrrrr
~2 
cccccccccc
~3 
ddddddddddd 

~3 
ddddddddddd 
        ~end  ";


$arr = preg_split('#~\d1,2.(\r\n|\n|\r)#', $texto);

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

【讨论】:

请解释 OP 尝试中的错误是什么,以及您的代码如何解决该错误。

以上是关于PHP文本到数组正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

PHP 正则

php正则表达式

在 PHP 中将文本列表转换为 html 的正则表达式

php正则问题如何取文本中间内容?

PHP 正则表达式 - 仅过滤器编号

PHP - 如何通过将键与正则表达式匹配来搜索关联数组