2011-07-09 52 views
1

我在尋找的東西的行爲就像爆炸,但使用一個以上的字符串分隔符,即如何分割一個字符串與多個分隔符跟隨或不是由空白(混合)?

+ - (

都可能是分隔符。

例如, 「爆炸」 下面的字符串後:

$string = 'We are 3+4-8 - (the + champions' 

我應該得到這個爲$字符串[0]:

['We are 3+4-8'] 

是否有充當這樣的任何功能?

+0

?和空間? –

+0

你應該試着更好地說出你的問題,如果你在描述你的問題方面做得很好,你應該得到更好更快的答案。 – albertein

+0

使用下面的答案之一,只需訪問結果數組中的第一個元素,如$ result [0] – albertein

回答

2
$string = 'We are - (the + champions'; 
$words = preg_split('@[\W][email protected]', $string) 

有了這個,你獲得[我們,是的,冠軍]

$string = 'We are - (the + champions'; 
$words = preg_split('/[\+\-\(]/', $string) 

有了這個,你保留空格獲得[ '我們', '', '中', '冠軍'] ;這將是必要的修剪。

$string = 'We are 3+4-8 - (the + champions'; 
$words = preg_split('/[\+\-] |[\(]/', $string) 

這樣,最後,你獲得[ '我們是3 + 4 + 8', '該', '冠軍'。在這種情況下修剪不是必要的。

+0

這是不正確的,你需要保留空白。 – 2011-07-09 01:08:06

+0

不,'我們'必須是字符串的第一個分割,我不需要單個單詞到第一個數組中,而是在分隔符之前的每個單詞。 – smepie

+0

改變像我想象的你想 –

1

這將通過兩種-+用字符類分割你的字符串,或(

$result = preg_split(/[ \- ]|[ \+ ]|[(]/im, $string); 
$i = 0; 
foreach ($result as $match){ 
    $result[$i] = trim($match); 
} 
+1

你有模式與字符串混合......並且,它不會返回海報示例中給出的相同數組,它會返回與爆炸相同的內容,除非數組中有額外的空元素。 – 2011-07-09 00:59:25

+0

這仍然沒有給出正確的輸出。 – 2011-07-09 01:06:38

1
$string = 'We are - (the + champions'; 

$split = preg_split('/[\-,\(,\+]/', $string); 
+0

嗨邁克,這似乎是正確的...好 – smepie

+0

等待...在這種情況下'e-p1' - 不是分隔符。如何改變? – smepie

+0

'e-p1'是什麼意思? – Mike

2

使用preg_split()

$chars = '+-('; 
$regexp = '/[' . preg_quote($chars, '/') . ']/'; 
$parts = preg_split($regexp, $string); 

忘了補充一點,如果你想解析表達式,如搜索查詢,preg_split()將不會削減它,你會需要一個完全成熟的解析器。我認爲Zend框架中必須有一個。

0

如何:

$str = 'We are 3+4-8 - (the + champions'; 
$res = preg_split('/\s+[+(-]\s+/', $str); 
print_r($res); 

輸出:

[0] => We are 3+4-8 
[1] => (the 
[2] => champions 
你想正是考慮分離器什麼字符