2013-01-24 35 views
1

這裏是我的字符串:php preg_split與正則表達式,需要一個技巧?

$myString = "first second third,el forth, fiveeee, six"; 

我想捕捉的是:

first 
second 
third 
el forth 
fiveeee 
six 

這是我嘗試了在使preg_split使用正則表達式:

$myPattern = "[\s,]"; 

問題這是捕獲「el」和「四」seperatly ..

我怎麼騙到這捕捉前進?

編輯:

我不清楚.. 我想提出捕捉EL作爲一個單一的數組元素。因爲EL太短了。我認爲這是一個單詞。像:

EL CLASSICO,SOMETHING DIFFERENT,SOMETHINGELSEHERE SOMEMORETEXT應該是:

​​

他們應該用空格或逗號分隔來,但如果有像EL或LE,應該被忽略。問題編輯後

+2

拆分',\ s *'? –

+2

你如何確定像「el forth」這樣的字符串應該被捕獲爲一個項目而「第一秒」被捕獲爲兩個項目?我所知道的是,就目前而言,如果程序員不知道實際字符串是什麼,那麼當字符串中的值發生更改時,您無法可靠地分割出這樣的字符串。 –

+0

@MikeBrant我想確定它是否等於或少於3個字符,如DER DIE DAS或EL或LE ... –

回答

1
<?php 
$myString = "first second third,el forth,del fiveeee,six,six seven,four six"; 
$myPattern = "/\s*,\s*|(?<=[^\s,]{4})[\s,]+/"; 

print_r(preg_split($myPattern, $myString)); 
?> 

產生

[0] => first 
[1] => second 
[2] => third 
[3] => el forth 
[4] => del fiveeee 
[5] => six 
[6] => six seven 
[7] => four 
[8] => six 

(?<=[^\s,]{4})positive look-behind assertion。只有在前面有四個非分隔符字符(但它不匹配字符本身,它只檢查它們是否存在)之前,它纔會成功。如果前面的單詞太短,這樣就不會分裂。 但是,如果分隔符包含逗號,它總是會分割 - 這就是\s*,\s*|的用途。

+0

謝謝完美。我想我需要一個小時才能理解這個..希望。也許一天..謝謝。 –

+0

爲什麼括號中的正面外觀斷言? –

+0

而不是:\ s *,\ s * |爲什麼是簡單的,|還不夠,如果這只是用逗號分割? –

2

沒有很好的解決方案,igrone

只是str_replace(',' , ' ' , $myString)最終str_replace(' ', ' ' , $myString)避免雙重空間或:

preg_replace('@, ?' , ' ' , $myString)

0
implode(' ', preg_split('/,\s*/', $myString));