$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 个或多个字符(懒惰(。此外,您在此处放错了注释符:
#*(+?)#*
在这里:
#**(+?)#**
您需要使用:
#'*(.+?)'*#
和:
#'*'*(.+?)'*'*#