PHP 从分隔符之间提取数据


PHP extracting data from inbetween delimiters

$heading = '';
$text = '
        *Heading 1* Text **SubHeading 1A** More Text **SubHeading 1B** Text**Subheading 1C**
        *Heading 2* Text **SubHeading 2A** More Text **SubHeading 2B** Even more text**Subheading 2C**
    ';
    if(preg_match('#*(+?)#*',$text,$result));
        $headings .= $result;
    if(preg_match('#**(+?)#**',$text,$result));
        $headings .= $result;
    echo $heading;

从$text,我怎么可能提取*之间的内容,以便一个*之间的内容是标题,而 2 ** 之间的内容是副标题?

我试图实现的输出是这样的:

Heading 1
    SubHeading 1A
    SubHeading 1B
    SubHeading 1C
Heading 2
    SubHeading 2A
    SubHeading 2B
    SubHeading 2C

我确实付出了很大的努力,但我的头脑再也想不出任何东西了。你能帮忙吗?

试试这个:

$result = array();
if (preg_match_all('/([*]+[^*]+[*]+)/', $text, $matches))
        $result = array_map(function ($v) {
                return str_replace('*', '  ', rtrim($v, '*'));
        }, $matches[1]);
print_r($result);

演示

您需要

在正则表达式中转义*并使用.+?来匹配输入中的 1 个或多个字符(懒惰(。此外,您在此处放错了注释符:

#*(+?)#*

在这里:

#**(+?)#**

您需要使用:

#'*(.+?)'*#

和:

#'*'*(.+?)'*'*#