PHP从中间分隔符中提取数据

时间:2014-08-18 08:33:44

标签: php regex preg-replace preg-match

$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,我怎么可能提取*之间的内容,以便一个*之间的标题是什么,而**之间的是什么是副标题?

我想要实现的输出是这样的:

Heading 1
    SubHeading 1A
    SubHeading 1B
    SubHeading 1C

Heading 2
    SubHeading 2A
    SubHeading 2B
    SubHeading 2C

我确实付出了很多努力,但我的思绪再也没有想到了。你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

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

print_r($result);

Demo

答案 1 :(得分:0)

您需要转义*并在正则表达式中使用.+?来匹配输入中的1个或多个字符(懒惰)。你在这里也错放了reges delimiters:

#*(+?)#*

在这里:

#**(+?)#**

您需要使用:

#\*(.+?)\*#

#\*\*(.+?)\*\*#