例如我有如下句子
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)
)