2014-11-04 76 views
0

我在一個字符串中有超過一千條評論。我被問到是否可以得到每位作者的平均費用。下面是一個字符串的例子。我已經強調了我需要提取到數組中的內容。使用爆炸需要幫助,preg_match

Shepherd的Bush Empire(時報P54 - 4 *大衛·辛克萊)灰熊 - 蛇形會議,海德公園,倫敦(獨立Viewspaper P17 - 4 * Elisa的佈雷)金髮女郎 - 肯伍德別墅(孫P69 - 4 * JJ)傑夫·特威迪 - 聯合教堂,倫敦(獨立Viewspaper P17 - 4 * Enjoli利斯頓)託尼·本內特 - 阿爾伯特音樂廳,倫敦(時報P68 - 4 *克萊夫·戴維斯,標準P40 - 5 *傑克Massarick

無論如何爆炸字符串*回去一個字符並轉發到單詞。

我知道會有機率,但可以稍後再刪除。有沒有使用preg_splitexplode的方法?

+0

我期望http://php.net/manual/en/function.preg-match-all.php將是您的解決方案的基礎,但我的正則表達式foo是可悲的缺乏 – Steve 2014-11-04 16:59:04

回答

0

找到一個單一的數字,後跟一個星號,然後用空格

preg_match_all("/\d\* ?\w* ?\w*/", $input_lines, $output_array); 

這裏分隔的兩個單詞是一個例子鏈接http://www.phpliveregex.com/p/7Ty

你的輸出數組看起來像這樣

Array 
(
    [0] => Array 
     (
      [0] => 4* David Sinclair 
      [1] => 4* Elisa Bray 
      [2] => 4* JJ 
      [3] => 4* Enjoli Liston 
      [4] => 4* Clive Davis 
      [5] => 5* Jack Massarick 
     ) 

) 

編輯:: 添加一個可選的小數位使用此/\d(\.\d{1,2})?\* ?\w* ?\w*/

+0

輝煌謝謝你,偉大的鏈接,以及我將保存該工具 – gareth 2014-11-04 17:23:18

+0

只是注意到有一對3.5 *是否有任何方式來包括這些? – gareth 2014-11-04 17:26:03

+0

我更新了我的答案,以顯示正則表達式並添加了可選的1位或2位小數位。 @gareth – Zombiesplat 2014-11-04 17:33:34

0

你可以使用正則表達式是這樣的:

​​

應該做的伎倆。

這看起來爲1個或更大的數字,(保存它們),其次是零個或多個丟棄的空間,文字*,後跟任意數量丟棄空間,隨後通過任何數目的任何字符,但字面),保存它們。