$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
我确实付出了很多努力,但我的思绪再也没有想到了。你能帮忙吗?
答案 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);
答案 1 :(得分:0)
您需要转义*
并在正则表达式中使用.+?
来匹配输入中的1个或多个字符(懒惰)。你在这里也错放了reges delimiters:
#*(+?)#*
在这里:
#**(+?)#**
您需要使用:
#\*(.+?)\*#
和
#\*\*(.+?)\*\*#