【发布时间】:2016-07-19 13:00:25
【问题描述】:
在 PHP 中,我想找出最好的方法来获取包含一些简单标签的字符串,并将其分解为一个多维数组,每个索引包含另外两个数组,其中包含项目 tags 和 text。如果没有异常标签,tags 将是 null。如果字符串的一部分上存在一个(或多个)标签,tags 将包含所有相关标签指示符的空格分隔列表。
例子:
字符串
The __**quick** brown__ fox jumped __over the__ lazy dog.
处理过的数组
[
[
'tags' => null,
'text' => 'The ',
],
[
'tags' => '__ **',
'text' => 'quick',
],
[
'tags' => '__',
'text' => ' brown',
],
[
'tags' => null,
'text' => ' fox jumped ',
],
[
'tags' => '__',
'text' => 'over the',
],
[
'tags' => null,
'text' => ' lazy dog.',
],
]
我正在努力思考什么是做这件事的最佳方式。这个概念看起来很简单,但我越想它,我就越困惑如何执行它。在foreach 中使用preg_match 函数的某种组合是最好的方法,还是有其他选择?任何指向正确方向的帮助将不胜感激。
【问题讨论】:
-
您希望得到什么样的结果?你试过
explode()吗? -
我认为您正在寻找的是一个 tokenizer。想象一下这样的输出:
[ [ "text", "The " ], [ "tag", "__" ], [ "tag", "**" ], [ "text", "quick" ], [ "tag", "**" ], [ "text", " brown" ] .. etc(有点浓缩,因为我这里没有太多空间)。我不知道正则表达式是否是这里最好的工具。我认为对字符串进行循环以找到每个 tag 就足够了。每个标记都是 ( text|tag, [value] ) 的元组。