如何使用PHP将基于两个字符串的文本拆分为一个分隔符(例如星号和新行特殊字符)?

如何使用PHP将基于两个字符串的文本拆分为一个分隔符(例如星号和新行特殊字符)?,php,Php,您能帮我根据和“逻辑表达式拆分一个长文本,作为由六个星号和一个新行特殊字符组成的分隔符吗 我是PHP新手,正在实习,我必须解决一个遗留问题 根据我的基本知识,这两个分隔符都是特殊字符,需要一个转义函数 这是我的数据结构。 第一个块不以任何分隔符开头。 ****** 第二个数据块与第一个数据块之间用六个星号加回车分隔。 ****** 第三个区块与第二个区块之间用六个星号加上回车符隔开。 ****** 儿子在。。。等等。 ****** 但我们可能会发现其他星号,可能在段落内有六个类似******的星

您能帮我根据和“逻辑表达式拆分一个长文本,作为由六个星号和一个新行特殊字符组成的分隔符吗

我是PHP新手,正在实习,我必须解决一个遗留问题

根据我的基本知识,这两个分隔符都是特殊字符,需要一个转义函数

这是我的数据结构。

第一个块不以任何分隔符开头。
******
第二个数据块与第一个数据块之间用六个星号加回车分隔。
******
第三个区块与第二个区块之间用六个星号加上回车符隔开。
******
儿子在。。。等等。
******
但我们可能会发现其他星号,可能在段落内有六个类似******的星号,这些星号不能拆分

没有******的新线路也一样,但应保持不变


******
还要注意,数据源中的块数是可变的。我知道这是一个有臭味的结构的问题,但是我们研究了存储组合块的好处,选择它是为了节省存储空间和时间。我听说这样的模式很糟糕,但我们需要处理一些遗留问题

因此,这就是我想要得到的。
区块1: 第一个块不以任何分隔符开头

组块2: 第二个区块与第一个区块之间用六个星号加上回车符隔开

区块3: 第三个区块与第二个区块由六个星号加上回车分隔

区块4: 还有儿子。。。等等

组块5: 但我们可能会发现其他的星号,可能在段落中有六个类似******,这些星号不能分开

没有******的新线路也一样,但应保持不变


这是我在修改Internet上的函数后使用的代码。

print_r(转义('***',$my_text_变量'\n')


此功能已在此平台上进行了讨论[https://stackoverflow.com/questions/8519793/php-explode-but-ignore-escaped-delimiter][1].
这是我从代码中得到的结果。


第一个块不以任何分隔符开头。
=>[2]=> 第二个区块与第一个区块之间用六个星号加上回车符隔开。
[3]=>[4]=> 第三个区块与第二个区块之间用六个星号加上回车分隔。
[5] => [6] => 还有儿子。。。等等。
[7]=>[8]=> 但我们可能会在段落中找到其他星号,比如[9]=>[10]=>之类的六个星号,这些星号不能拆分

对于没有[11]=>[12]=>的新行,应保持不变


[13]=>
还要注意,数据源中的块数是可变的。我知道这是一个臭烘烘的结构问题,但我们研究了存储联合块的好处,并选择它来节省存储空间和时间。

我更改了算法,并成功地用以下代码替换了新行开头的分隔符:

  class testit(){

  public function __construct(){
   $str = "this is a string ****** some text to be removed /r/n";
   echo $this->delete_all_between("******", "/r/n", $str);
 // returns this is a string some text to be removed
  }
  private function delete_all_between($beginning, $end, $string) {
     $beginningPos = strpos($string, $beginning);
     $endPos = strpos($string, $end);
     if ($beginningPos === false || $endPos === false) {
        return $string;
     }

     $textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos);

     return $this->delete_all_between($beginning, $end, str_replace($textToDelete, '', $string)); // recursion to ensure all occurrences are replaced
    }
}
$pattern = '/^[\*]+/m';
preg_replace($pattern, '######', $text)); // Strip off the starting asterisks

这给了我一个不同的问题,我可以在散列标签上进行拆分,因为我不必逃避它们。

如何
explode(“*******”.PHP_EOL,$my_text_variable)
?此命令不会创建单独的文本块。我无法使此命令正常工作。很抱歉