【发布时间】:2019-06-13 16:09:08
【问题描述】:
我有一个 BBcode 所见即所得编辑器,仅用于基本样式粗体、斜体和下划线。我需要从中获取存储的数据并使用它来将其转换为 PHPWord 友好的数组。
PHPWord 可与名为 textrun 的东西一起使用,因此要在一行中包含多种样式,您可以简单地执行类似...
$PHPWordTextRun = new TextRun();
$PHPWordTextRun->addText('This is some text that contains ', 'NORMAL');
$PHPWordTextRun->addText('Italic ', 'ITALIC');
$PHPWordTextRun->addText(' and ', 'NORMAL');
$PHPWordTextRun->addText('bold', 'BOLD');
$PHPWordTextRun->addText('text', 'NORMAL');
我仍然完全不确定我是如何做嵌套标签的。
所以无论如何,这就是我需要帮助的地方。在下面打开这个字符串...
$string = "This is some text that contains [i]Italic[/i] and [b]bold[/b] text"
然后把它变成这样的数组
Array("This is some text that contains ","[i]Italic[/i]","and ","[b]bold[/b]","text");
我是一个正则表达式的新手,甚至不确定你是否会在这里使用正则表达式。
我的最终目标是最终得到类似...
$PHPWordTextRun = new TextRun();
foreach($array as $line) {
$PHPWordTextRun->addText($line['text'], $line['style']);
}
更新:
所以在测试并尝试了几个答案之后,我想出了以下答案。
如下所示,我尝试了以下方法。
$array = preg_split('/(.*?)(\[.+?\].+?\[\/.+?\])(.*?)|(.*)/m', $txt, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
这在一定程度上是有效的,但它确实有很多空白,但用 PREG_SPLIT_NO_EMPTY 修复,但它不支持嵌套括号。
【问题讨论】:
-
什么决定了分裂?
-
如果你能把字符串描述成文字,你可以很容易地想出一个正则表达式。如果您完全不熟悉它,那么它通常不是最佳选择。这似乎是你真正想要完成的任何不切实际的中间步骤。
-
嵌套标签呢?例如:
This is some text that [i]contains Italic and [b]bold[/b] text[/i] -
@Toto 是的,你说得对,我没有考虑过,但确实需要,努力思考一个实用的方法来解决这个问题。
-
@Wiktor 你也打算锤stackoverflow.com/q/60126022/2943403?