【问题标题】:PHP text to Array RegexPHP文本到数组正则表达式
【发布时间】: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 = '/^~(\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("/~[0-9]+/", $texto);

标签: php regex preg-match preg-match-all preg-grep


【解决方案1】:

我会改用preg_split()

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

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

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

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

相反,只删除空格:

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

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

【讨论】:

  • 这有助于我制定解决方案。谢谢 !!格拉西亚斯 ;)
【解决方案2】:
$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>";

【讨论】:

  • 请解释 OP 尝试中的错误是什么,以及您的代码如何解决该错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多