如何使用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)
?此命令不会创建单独的文本块。我无法使此命令正常工作。很抱歉