获取句子中按顺序排列的所有单词


Get all words in sequence form in sentence

例如我有如下句子

VA Trance Pro-Motion [PartI](December 2014)<4CD>{1337x} TheDanceCube.

我想将结果以以下格式存储到数组中

[1]->VA
[2]->Trance
[3]->Pro-Motion
[4]->[PartI]
[5]->(December 2014) 
[6]-><4CD>
.
.
and so on till full sentence

知道如何实现吗?

我尝试了如下所示的内容

$final = str_explode(' ',$string);

但它不适用于括号内的东西。我认为它只能通过正则表达式或任何其他可用的简单功能?

这应该有效:

((?:'w|-)+|(?:'([^')]+'))|(?:'{[^'}]+'})|(?:'[[^']]+'])|(?:<[^>]+>))

带有全局标志g(PHP中的preg_match_all()

请参阅此处的示例:https://regex101.com/r/oN3vS2/1

工作原理:

这也将捕获所有带有-的单词(但忽略括号)

((?:'w|-)+?)

其余的都是每种类型括号的块,例如()

(?:'([^')]+')) 

对于 utf-16 字符,请使用:

preg_match_all('/((?:'w|-)+|(?:'([^')]+'))|(?:'{[^'}]+'})|(?:'[[^']]+'])|(?:<[^>]+>))/u', $phrase, $results);

注意:

这段代码不会在句子的末尾停止,但可能有比这个正则表达式更好的方法来做到这一点(就像之前的split('.', $phrase)explode('.', $phrase)