2015-06-15 27 views
1

例如,我有一句话下面获取序列形式的所有单词在句子

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); 

,但它不会为工作的事情里面brackets..I认为它可能只能通过正则表达式?或可用任何其他容易的功能呢?

+0

为一个谁做-1,我已编辑题。 – Vishnu

+1

句子的格式是否总是相同? – tvgemert

+0

不,它不同...一般应该考虑任何括号作为单独的词 – Vishnu

回答

3

这应该工作:

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

与全局标志g(在PHP preg_match_all()

看到这里的例子:https://regex101.com/r/oN3vS2/1

它是如何工作的:

这wwould也可以用-捕捉所有单词(但忽略b球拍)

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

的其余部分是针对每种类型的支架块,像这样对()

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

对于UTF-16字符使用:

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

注:

此代码不会停在句末,但也有可能是更好的方法比这个正则表达式,要做到这一点(如split('.', $phrase)explode('.', $phrase)之前)

+0

没有全球性的php.I尝试preg_match_all及其工作.....但上述代码不适用于字符串像ВасяОбломов – Vishnu

+0

'u'标志应该帮助或使用'[\ p {L} \ p {N} _]'而不是'\ w' –

+0

我得到PCRE不支持\ L,\ l,\ N {name},\ U或\ u在偏移量5错误 – Vishnu